NSMutableURLRequestを使用して、SendGridを使用して電子メールを送信するサーバー側のPHPスクリプトにPOSTデータを送信しています。これはうまく動作します。しかし、UIImagedataを添付ファイルとして正しくパッケージ化する方法はわかりません。ここに私の現在のコードがあります:SendGridへのPOSTリクエストを使用して、iOSで写真の添付ファイルを送信するにはどうすればよいですか?
// 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];
}
この質問を調べると、既存のiOS SendGridのlibがあることがわかります。残念ながら、これは答えではありません。 SendGridの人々は、セキュリティ上の懸念からlibを使わないように言います。
あなたはSendGridを直接使用することについて話しているので、多くのアップフォースと誰も明らかにしていません。あなたはSendGridを使って電子メールを送るサーバー側のPHPスクリプトを 'SendGrid endpoint'に変更することができます。なぜなら、最初のサーバーは自分のサーバーに関するもので、もう一つはSendGridサーバーに関するものです。結局のところ、あなたは私の答えにコメントを追加することができます。 Btw、私は説明を追加し、直接ファイルをアップロードするために何をする必要があるかを説明するドキュメントにリンクします。それが役に立てば幸い。 –