[ios] iPhone 응용 프로그램에서 메일을 보내려면 어떻게합니까

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 소프트웨어가 출시 된 후가는 방법입니다. 샘플 코드내가 쓴 튜토리얼을 볼 수 있습니다 .


답변

여기에 추가하고 싶은 몇 가지 사항 :

  1. 시뮬레이터에 mail.app가 설치되어 있지 않으므로 시뮬레이터에서 mailto URL을 사용할 수 없습니다. 그래도 장치에서 작동합니다.

  2. mailto URL의 길이에는 제한이 있습니다. URL이 4096자를 초과하면 mail.app이 시작되지 않습니다.

  3. 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)
}