iPhone 응용 프로그램에서 이메일을 보내려고합니다. iOS SDK에 이메일 API가 없다고 들었습니다. 다음 코드는 응용 프로그램을 종료하기 때문에 사용하고 싶지 않습니다.
NSString *url = [NSString stringWithString: @"mailto:foo@example.com?cc=bar@example.com&subject=Greetings%20from%20Cupertino!&body=Wish%20you%20were%20here!"];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
내 앱에서 이메일을 보내려면 어떻게해야합니까?
답변
iOS 3.0 이상 에서는 MessageUI 프레임 워크에 있는 MFMailComposeViewController
클래스와 MFMailComposeViewControllerDelegate
프로토콜을 사용해야합니다 .
먼저 프레임 워크를 추가 하고 가져옵니다.
#import <MessageUI/MFMailComposeViewController.h>
그런 다음 메시지를 보내려면
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"My Subject"];
[controller setMessageBody:@"Hello there." isHTML:NO];
if (controller) [self presentModalViewController:controller animated:YES];
[controller release];
그런 다음 사용자는 작업을 수행하고 시간에 대리인 콜백을 얻습니다.
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError*)error;
{
if (result == MFMailComposeResultSent) {
NSLog(@"It's away!");
}
[self dismissModalViewControllerAnimated:YES];
}
장치가 이메일을 보내도록 구성되어 있는지 확인하십시오.
if ([MFMailComposeViewController canSendMail]) {
// Show the composer
} else {
// Handle the error
}
답변
MFMailComposeViewController 는 iPhone OS 3.0 소프트웨어가 출시 된 후가는 방법입니다. 샘플 코드 나 내가 쓴 튜토리얼을 볼 수 있습니다 .
답변
여기에 추가하고 싶은 몇 가지 사항 :
-
시뮬레이터에 mail.app가 설치되어 있지 않으므로 시뮬레이터에서 mailto URL을 사용할 수 없습니다. 그래도 장치에서 작동합니다.
-
mailto URL의 길이에는 제한이 있습니다. URL이 4096자를 초과하면 mail.app이 시작되지 않습니다.
-
OS 3.0에는 앱을 종료하지 않고 전자 메일을 보낼 수있는 새로운 클래스가 있습니다. MFMailComposeViewController 클래스를 참조하십시오.
답변
응용 프로그램에서 전자 메일을 보내려면 앱 내부에서 자신의 메일 클라이언트 (SMTP)를 코딩하거나 서버에서 메일을 보내지 않는 한 위의 코드 만 사용하면됩니다.
예를 들어 메일을 보낼 서버의 URL을 호출하도록 앱을 코딩 할 수 있습니다. 그런 다음 코드에서 URL을 호출하면됩니다.
위 코드를 사용하면 서버 측 방법뿐만 아니라 SMTP 클라이언트 방법으로 허용하는 전자 메일에 아무것도 첨부 할 수 없습니다.
답변
아래 코드는 내 응용 프로그램에서 첨부 파일이있는 전자 메일을 보내는 데 사용됩니다. 첨부 파일은 이미지입니다. 모든 유형의 파일을 보낼 수있는 것은 명심하십시오. 올바른 것을 지정해야한다는 것입니다. ‘mimeType’
이것을 .h 파일에 추가하십시오
#import <MessageUI/MFMailComposeViewController.h>
프로젝트 파일에 MessageUI.framework 추가
NSArray *paths = SSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"myGreenCard.png"];
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"Green card application"];
[controller setMessageBody:@"Hi , <br/> This is my new latest designed green card." isHTML:YES];
[controller addAttachmentData:[NSData dataWithContentsOfFile:getImagePath] mimeType:@"png" fileName:@"My Green Card"];
if (controller)
[self presentModalViewController:controller animated:YES];
[controller release];
위임 방법은 다음과 같습니다.
-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error;
{
if (result == MFMailComposeResultSent) {
NSLog(@"It's away!");
}
[self dismissModalViewControllerAnimated:YES];
}
답변
이것은 U를 도울 수 있지만 메시지 UI framewark를 포함하고 대리자를 포함하는 것을 잊지 않는 코드입니다 MFMailComposeViewControllerDelegate
-(void)EmailButtonACtion{
if ([MFMailComposeViewController canSendMail])
{
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller.navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation_bg_iPhone.png"] forBarMetrics:UIBarMetricsDefault];
controller.navigationBar.tintColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];
[controller setSubject:@""];
[controller setMessageBody:@" " isHTML:YES];
[controller setToRecipients:[NSArray arrayWithObjects:@"",nil]];
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
UIImage *ui = resultimg.image;
pasteboard.image = ui;
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(ui)];
[controller addAttachmentData:imageData mimeType:@"image/png" fileName:@" "];
[self presentViewController:controller animated:YES completion:NULL];
}
else{
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"alrt" message:nil delegate:self cancelButtonTitle:@"ok" otherButtonTitles: nil] ;
[alert show];
}
}
-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
[MailAlert show];
switch (result)
{
case MFMailComposeResultCancelled:
MailAlert.message = @"Email Cancelled";
break;
case MFMailComposeResultSaved:
MailAlert.message = @"Email Saved";
break;
case MFMailComposeResultSent:
MailAlert.message = @"Email Sent";
break;
case MFMailComposeResultFailed:
MailAlert.message = @"Email Failed";
break;
default:
MailAlert.message = @"Email Not Sent";
break;
}
[self dismissViewControllerAnimated:YES completion:NULL];
[MailAlert show];
}
답변
스위프트 2.2. Esq의 답변 에서 채택
import Foundation
import MessageUI
class MailSender: NSObject, MFMailComposeViewControllerDelegate {
let parentVC: UIViewController
init(parentVC: UIViewController) {
self.parentVC = parentVC
super.init()
}
func send(title: String, messageBody: String, toRecipients: [String]) {
if MFMailComposeViewController.canSendMail() {
let mc: MFMailComposeViewController = MFMailComposeViewController()
mc.mailComposeDelegate = self
mc.setSubject(title)
mc.setMessageBody(messageBody, isHTML: false)
mc.setToRecipients(toRecipients)
parentVC.presentViewController(mc, animated: true, completion: nil)
} else {
print("No email account found.")
}
}
func mailComposeController(controller: MFMailComposeViewController,
didFinishWithResult result: MFMailComposeResult, error: NSError?) {
switch result.rawValue {
case MFMailComposeResultCancelled.rawValue: print("Mail Cancelled")
case MFMailComposeResultSaved.rawValue: print("Mail Saved")
case MFMailComposeResultSent.rawValue: print("Mail Sent")
case MFMailComposeResultFailed.rawValue: print("Mail Failed")
default: break
}
parentVC.dismissViewControllerAnimated(false, completion: nil)
}
}
고객 코드 :
var ms: MailSender?
@IBAction func onSendPressed(sender: AnyObject) {
ms = MailSender(parentVC: self)
let title = "Title"
let messageBody = "/programming/310946/how-can-i-send-mail-from-an-iphone-application this question."
let toRecipents = ["foo@bar.com"]
ms?.send(title, messageBody: messageBody, toRecipents: toRecipents)
}