Send Mail via iOS - iphone

i want to send a Mail in my app with an .PHP file as Attachment:
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;
[mailViewController setSubject:#""];
[mailViewController setMessageBody:#"" isHTML:NO];
mailViewController.navigationBar.tintColor = [UIColor blackColor];
NSData *myData = [NSData dataWithContentsOfFile:[self getScriptPath]];
NSString *fileName = #"upload.php";
[mailViewController addAttachmentData:myData mimeType:#"text/html" fileName:fileName];
[self presentViewController:mailViewController animated:YES completion:nil];
[mailViewController release];
}
else
NSLog(#"Device is unable to send email in its current state.");
The Mail is being sent, but without the attachment!...

I bet your [self getScriptPath] method return an invalid path, or a path to a non-existing file, and thus [NSData dataWithContentsOfFile:...] probably return nil.
You should use a breakpoint or NSLog to check the value returned by getScriptPath and fix it accordingly.
For example if you embedded the "upload.php" file in your application (you added it in your Xcode project, along with the other resources of your application), you should use this to get the valid path of your script file in your bundle:
-(NSString*)getScriptPath
{
return [[NSBundle mainBundle] pathForResource:#"upload" ofType:#"php"];
}
See the Bundle Programming Guide documentation for more info.

Use this code to attach image file.
UIImage *emailImage = [UIImage imageNamed:#"loveCoding.png"];
[mailViewController addAttachmentData:UIImageJPEGRepresentation(emailImage, 1) mimeType:#"image/png" fileName:#"loveCocoa.png"];
To attach file
NSString *fileName = [NSString stringWithFormat:#"Documents/%#.txt",sGame.userName];
NSString *fullFilePath = [NSHomeDirectory() stringByAppendingPathComponent:fileName];
NSString *emailFileName = [NSString stringWithFormat:#"%#_Report.txt",sGame.userName];
NSData *myData = [NSData dataWithContentsOfFile:fullFilePath];
[email addAttachmentData:myData mimeType:#"text/plain" fileName:emailFileName];

Looks like your NSData is not loading correctly. Check your path from getScriptPath

Related

How to attach a plist into an email in Xcode?

I am working on a quiz app where the user's input will be stored inside a plist files. I tried researching for various ways to attach files to an email, but mostly are all for JPEG and TXT files.
I have created a plist and tried to attach the it the same way, but on the mailcomposer it only shows the filename of the attachment.
-(NSString *) dataFilePath
{
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [path objectAtIndex:0];
return [documentDirectory stringByAppendingPathComponent:#"Answer.plist"];
}
This is the code in the composer
-(IBAction) openEmail {
MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
[mailComposer setMailComposeDelegate:self];
if ([MFMailComposeViewController canSendMail]) {
[mailComposer setToRecipients:[NSArray arrayWithObjects:#"secondary_Example#email.com", nil]];
[mailComposer setSubject:#"Subject Topic"];
[mailComposer setMessageBody:#"Message Body" isHTML:NO];
[mailComposer setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
NSString *path = [[NSBundle mainBundle] pathForResource:#"Answer" ofType:#"plist"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[mailComposer addAttachmentData:myData mimeType:#"application/xml" fileName:#"Answers"];
[self presentModalViewController:mailComposer animated:YES]; }}
Am I missing something out? Please help.. Would really appreciate it.

Save PDF then send in email

I am trying to save a pdf from a url and then send it in an email. The sender seems to have it but the receiver does not get it.
When I do a NSLog of the NSString file I get /var/mobile/Applications/0ADE222E-6346-4C6C-8348-DA5327B980AA/Documents/myPDF.pdf
It seems like it saves but it doesn't send. Here is my code below for saving and sending
EDIT
Updated code
// This pdfURL is 0 bytes
NSData *pdfURL = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:#"%#",webPage.urlString]]];
//Store the Data locally as PDF File
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *file = [documentDirectory stringByAppendingFormat:#"/myPDF.pdf"];
[pdfURL writeToFile:file atomically:YES];
//Sending the pdf
MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];
composer.mailComposeDelegate = self;
if ([MFMailComposeViewController canSendMail]){
//Changed email for privacy issues
[composer setToRecipients:[NSArray arrayWithObjects:#"123#abc.com", nil]];
[composer setSubject:[NSString stringWithFormat:#"%# email",titleText]];
[composer setMessageBody:#"your custom body content" isHTML:NO];
NSLog(#"pdf %#",file);
// This pdfData is 0 bytes
NSData *pdfData = [NSData dataWithContentsOfFile:file];
[composer addAttachmentData:pdfData mimeType:#"application/pdf" fileName:#"myPDF.pdf"];
[composer setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:composer animated:YES];
}
If it's from a URL, store it in NSData:
NSData *pdfData = [NSData dataWithContentsOfURL[NSURL URLWithString:#"URL Of Pdf"]];
And then attach that to mail
The issue was with the webPage.urlString being empty. This code works just make sure the url string is not empty :P

Can't find vcard attachment with the mail

I am trying to send an email from my iphone, with a vcard as attachment. When I am sending the mail, the vcard is being attached with the mail. But the receiver of the mail can't find the vcard attachment. Help needed.
This is the code I have used
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
NSString *path = [[NSBundle mainBundle] pathForResource:#"Vcard" ofType:#"vcf"];
NSData *myData = [NSData dataWithContentsOfFile:path];
[picker addAttachmentData:myData mimeType:#"text/x-vcard" fileName:#"Vcard.vcf"];
[picker setMessageBody:emailBody isHTML:NO];
[self presentModalViewController:picker animated:YES];
[picker release];
Thanks
I found the solution... Isubmitted a bug on Apple radar about it. MFMailcomposer has a bug in which you have to send an image along with your extra attachments in order to get the weird items like a pdf to work... try this and replace the pdf with your card:
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
NSString *emailSubject = [NSString localizedStringWithFormat:#"MedicalProfile"];
[controller setSubject:emailSubject];
NSString *fileName = [NSString stringWithFormat:#"%#.pdf", profileName];
NSString *saveDirectory = NSTemporaryDirectory();
NSString *saveFileName = fileName;
NSString *documentPath = [saveDirectory stringByAppendingPathComponent:saveFileName];
*** YOU MUST INCLUDE AN IMAGE OR THE PDF ATTATCHMENT WILL FAIL!!!***
// Attach a PDF file to the email
NSData *pdfData = [NSData dataWithContentsOfFile:documentPath];
[controller addAttachmentData:pdfData mimeType:#"application/pdf" fileName:fileName];
// Attach an image to the email
NSString *imagePath = [[NSBundle mainBundle] pathForResource:#"miniDoc" ofType:#"png"];
NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
[controller addAttachmentData:imageData mimeType:#"image/png" fileName:#"doctor"];
[controller setMessageBody:[NSString stringWithFormat:#"%#'s Medical Profile attatched!", profileName] isHTML:NO];
[self presentModalViewController:controller animated:YES];
controller.mailComposeDelegate = self;
[controller release];

iPhone SDK Add Image to the Body of an Email?

I was wondering if anyone knew how to use an image in the body of an email when the mail app is opened. Can anyone help?
Thanks in advance Kieran.
NSData *photoData = UIImageJPEGRepresentation([UIImage imageNamed:#"qwerty.png"], 1);
MFMailComposeViewController *viewController = [[MFMailComposeViewController alloc] init];
[viewController addAttachmentData:photoData mimeType:#"image/jpg" fileName:[NSString stringWithFormat:#"photo.png"]];
I wrote the code by hand so it might have some mistake, but you should get the general idea.
you can attach image in mail body using base64 encoding
MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
NSData *imageData = UIImageJPEGRepresentation(image, 0.8);
NSString *imageStr = [imageData base64EncodingWithLineLength:[imageData length]];
NSString *htmlStr = [NSString stringWithFormat:#".....<img src='data:image/jpeg;base64,%#'>.......",imageStr];
[mailComposer setMessageBody:htmlStr isHTML:YES];
[self presentModalViewController:mailComposer animated:YES];
[mailComposer release];

iPhone MessageUI email attachments not being sent to receiver

I am trying to attach an image and a pdf to an email using the MessageUI framework. I followed the MailComposer example in the Apple documentation.
On the iPhone it seems to work perfectly, the image and the pdf both show up in the body of the send mail window as expected.
However, when I receive the email on my MacBook there are two problems.
1) myImage.png shows up as an attachment and is the correct dimensions but is totally blank
2) myPDF.pdf doesn't show up as an attachment at all
But, when I receive the mail on my iPhone, myImage.png shows up fine. myPDF.pdf still doesn't show up in mail on my iPhone though.
Hope someone can shed some light on what might be happening.
Here is the relevant code:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:#"Test Email"];
// Attach an image to the email
NSString *imagePath = [[NSBundle mainBundle] pathForResource:#"myImage" ofType:#"png"];
NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
[picker addAttachmentData:imageData mimeType:#"image/png" fileName:#"myImage"];
// Attach a PDF file to the email
NSString *pdfPath = [[NSBundle mainBundle] pathForResource:#"myPDF" ofType:#"pdf"];
NSData *pdfData = [NSData dataWithContentsOfFile:pdfPath];
[picker addAttachmentData:pdfData mimeType:#"application/pdf" fileName:#"myPDF"];
// Fill out the email body text
NSString *emailBody = #"This is a test.";
[picker setMessageBody:emailBody isHTML:NO];
[self presentModalViewController:picker animated:YES];
[picker release];
EDIT Instead of saving and retrieving my image and PDF to my mainBundle I used NSDocumentsDirectory and everything worked fine.
I had the same problem regarding the image attachment. Using this, I was able to send and actually receive the attached image:
//attachment
UIImage *image = [UIImage imageNamed:#"image.png"];
NSData *imageData = UIImagePNGRepresentation(image);
[picker addAttachmentData:imageData mimeType:#"image/png" fileName:#"theImage"];
I didn't try pdf sending, sorry.
Just my two cents,
Regards.
I don't know if it actually would cause your problem, but most people seem to include filename extensions on the fileName parameter to addAttachmentData, i.e.
[picker addAttachmentData:imageData mimeType:#"image/png" fileName:#"myImage.png"];
Try This ,This one worked for me .
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:#"Test Email"];
// Attach an image to the email
NSString *imagePath = [[NSBundle mainBundle] pathForResource:#"myImage" ofType:#"png"];
NSData *imageData = [NSData dataWithContentsOfFile:imagePath];
[picker addAttachmentData:imageData mimeType:#"image/png" fileName:#"myImage"];
// Attach a PDF file to the email
//NSString *pdfPath = [[NSBundle mainBundle] pathForResource:#"myPDF" ofType:#"pdf"];
//NSData *pdfData = [NSData dataWithContentsOfFile:pdfPath];
[picker addAttachmentData:pdfData mimeType:#"application/pdf" fileName:#"myPDF.pdf"];
// Fill out the email body text
NSString *emailBody = #"This is a test.";
[picker setMessageBody:emailBody isHTML:NO];
// [self presentModalViewController:picker animated:YES];
[picker release];
I have had the same problem and I determined that the MFMailComposeViewController is packaging the MIME for the PDF file with 7-bit transfer encoding, rather than quoted-printable or base-64 encoding. Obviously you cannot email binary files using 7-bit encoding. So either there is a transfer-encoding setting on a MFMailComposeViewController that I am missing or this object has a serious shortcoming.
I came across this as I was having the same issue...little old but in case anyone comes across this here is what helped me....
I was able to add my attachments in as usual (using 6 attachments of various types)...they would show up in the email body...but the receiver would never get all of the attachments....only one.
I pulled the files into my editor (drag and drop into your m or h files) and it showed the file path. Turns out that I had neglected to copy the first file to my project so the app was pulling from my local drive and then stopping as the other files I was trying to attach were not in the same folder. Once I pulled all of the attachments from the same location they all pulled in fine.
Hope that helps someone.