Używam NSMutableURLRequest do wysyłania danych POST do skryptu PHP po stronie serwera, który wysyła e-maile za pomocą SendGrid. Działa to dobrze. Jednak nie mam pojęcia, jak poprawnie ułożyć UIImagedata, aby wysłać jako załącznik. Oto mój obecny kod:Jak wysłać załącznik ze zdjęciami e-mail w systemie iOS za pomocą żądania POST do SendGrid?
// Choose an image from your photo library
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
chosenImage = info[UIImagePickerControllerEditedImage]; // chosenImage = UIImage
pickedData = UIImagePNGRepresentation(chosenImage); // pickedData = NSData
attachment = TRUE;
[picker dismissViewControllerAnimated:YES completion:NULL];
}
-(void)sendMail {
toEmailAddress = @"[email protected]";
subject = @"Some Subject";
message = @"Some message...";
fullName = @"Mister Bla Bla";
if (attachment == TRUE) {
// Create NSData object as PNG image data from camera image
NSString *picAttachment = [NSString stringWithFormat:@"%lu",(unsigned long)[pickedData length]];
NSString *picName = @"Photo";
post = [NSString stringWithFormat:@"&toEmailAddress=%@&subject=%@&message=%@&fullName=%@&picAttachment=%@&picName=%@", toEmailAddress, subject, message, fullName, picAttachment, picName];
} else {
post = [NSString stringWithFormat:@"&toEmailAddress=%@&subject=%@&message=%@&fullName=%@", toEmailAddress, subject, message, fullName];
}
NSData * postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO];
NSString * postLength = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
NSMutableURLRequest * request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.someURL.com/sendgrid.php"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
// send the POST request, and read the reply by creating a new NSURLSession:
NSURLSession *conn = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[conn dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"requestReply: %@", requestReply); // Return response from PHP script on server.
}] resume];
}
W przypadku badania tego pytania może się okazać, że istnieje istniejąca libra SendGrid iOS. Niestety nie jest to odpowiedź. Ludzie z SendGrid mówią, żebym nie używał biblioteki z powodu obaw związanych z bezpieczeństwem.
Wow, tak wiele przebojów i nikt nie wyjaśnia, że mówisz o bezpośrednim użyciu SendGrid. Można zmienić 'skrypt PHP po stronie serwera, który wysyła wiadomości e-mail za pomocą SendGrid' do' SendGrid endpoint', ponieważ pierwszy dotyczy własnego serwera, a drugi dotyczy serwera SendGrid. W końcu możesz dodać komentarz do mojej odpowiedzi. Przy okazji dodałem wyjaśnienie i link do dokumentów opisujących, co należy zrobić, aby bezpośrednio przesłać plik. Mam nadzieję, że to pomoże. –