Статьи

iOS SDK: отправка электронной почты в приложении

В этом руководстве по iOS SDK я покажу, как разрешить пользователям отправлять электронную почту, не выходя из приложения, используя класс MFMailComposeViewController. Мы настроим шаблон электронной почты с получателями, темой, основным текстом и даже вложенным изображением.

IOS SDK предоставляет простой в использовании стандартный интерфейс, позволяющий пользователям отправлять и редактировать электронную почту из собственного приложения. Для этого вам нужно будет использовать класс MFMailComposeViewController . Этот контроллер представления отображает стандартный почтовый интерфейс, а также предоставляет функциональные возможности для ответа на пользовательские события, выполняемые на этом интерфейсе. Например, класс уведомит вас, если пользователь нажмет «отправить» или «отменить».

Примечание: MFMailComposeViewController доступен только на iOS 3.0 или более поздней версии.

Итак, как это работает? Следуйте инструкциям в этом руководстве, чтобы узнать.


Откройте Xcode и выберите «Создать новый проект Xcode». Выберите View-Based Application и нажмите кнопку Далее . Введите имя для вашего проекта. Я назвал мой @ «Почта». Введите идентификатор вашей компании и убедитесь, что вы выбрали «iPhone» для семейства устройств , потому что мы собираемся сделать приложение для iPhone. Если вы сделали, нажмите кнопку Далее . Выберите место для сохранения вашего проекта и нажмите « Создать» .

Новый проект

Откройте файл «MailViewController.xib» и перетащите кнопку в представление. Установите название кнопки «Почта». Теперь выберите среднюю кнопку редактора, чтобы отобразить «Ассистент редактора», чтобы мы могли добавить действие к только что созданной кнопке.

Помощник редактора

Выберите кнопку и перетащите CTRL в «MailViewController.h». В появившемся всплывающем окне введите «openMail» для имени и убедитесь, что для типа подключения установлено «Действие», потому что мы хотим выполнить действие, а не розетку.

соединение

В области навигатора Xcode 4 выберите название проекта. Затем выберите текущую цель (в данном случае «Почта»), а затем перейдите на вкладку «Фазы сборки». Разверните параметр «Связать двоичные файлы с библиотеками», а затем нажмите кнопку «+», чтобы добавить новую платформу. Введите «message» в поле поиска и выберите опцию MessageUI.framework, которая появится в списке. Нажмите «Добавить», чтобы включить этот фреймворк в фазу связывания вашего проекта.

Теперь, когда вы добавили инфраструктуру MessageUI в свой проект, вам необходимо импортировать эту инфраструктуру в контроллер представления, который будет использовать MFMailComposeViewController , поэтому в нашем случае MailViewController.h.

Перейдите к этому файлу и измените код следующим образом:

1
2
3
4
5
6
7
8
#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
 
@interface MailViewController : UIViewController <MFMailComposeViewControllerDelegate>
 
— (IBAction)openMail:(id)sender;
 
@end

Как вы можете видеть, мы также объявили MFMaileComposeViewControllerDelegate в приведенном выше коде. Мы будем использовать этот делегат, чтобы увидеть результат по почте.


Перетащите следующее изображение в папку «Supporting Files» в своем проекте. Убедитесь, что перед копированием нажмите «Копировать элементы в папку целевой группы (если необходимо)».

MobileTuts + логотип

Откройте файл «MailViewController.m» и прокрутите вниз до действия openMail: и измените код следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
— (IBAction)openMail:(id)sender
{
    if ([MFMailComposeViewController canSendMail])
    {
     
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@»Failure»
                                                        message:@»Your device doesn’t support the composer sheet»
                                                       delegate:nil
                                              cancelButtonTitle:@»OK»
                                              otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
 
}

Здесь мы проверяем, может ли текущее устройство отправлять электронную почту с помощью canSendMail класса canSendMail MFMailComposeViewController . Вы должны всегда вызывать этот метод, прежде чем открывать почтовый интерфейс. Если устройство не может отправлять электронную почту, вы должны уведомить пользователя (для этого я использовал UIAlertView ).


Если устройство может отправлять электронную почту, мы отображаем почтовый интерфейс. Перейдите к openMail: и измените код следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
— (IBAction)openMail:(id)sender
{
    if ([MFMailComposeViewController canSendMail])
    {
        MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
         
        mailer.mailComposeDelegate = self;
         
        [mailer setSubject:@»A Message from MobileTuts+»];
         
        NSArray *toRecipients = [NSArray arrayWithObjects:@»[email protected]», @»[email protected]», nil];
        [mailer setToRecipients:toRecipients];
         
        UIImage *myImage = [UIImage imageNamed:@»mobiletuts-logo.png»];
        NSData *imageData = UIImagePNGRepresentation(myImage);
        [mailer addAttachmentData:imageData mimeType:@»image/png» fileName:@»mobiletutsImage»];
         
        NSString *emailBody = @»Have you seen the MobileTuts+ web site?»;
        [mailer setMessageBody:emailBody isHTML:NO];
         
        [self presentModalViewController:mailer animated:YES];
         
        [mailer release];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@»Failure»
                                                        message:@»Your device doesn’t support the composer sheet»
                                                       delegate:nil
                                              cancelButtonTitle:@»OK»
                                              otherButtonTitles: nil];
        [alert show];
        [alert release];
    }
 
}

Сначала мы создаем MFMaileComposeViewController и называем его «почтовик». Мы устанавливаем mailComposeDelegate на себя, чтобы мы могли видеть результат письма. Тема установлена ​​на «Сообщение от MobileTuts +». Как вы можете видеть, toRecipients имеет тип NSArray . Это потому, что вы можете добавить несколько получателей. Я добавил два поддельных адреса электронной почты, но, конечно, вы можете указать любой понравившийся вам адрес. После этого мы сохраняем изображение как объект NSData , потому что мы не UIImage напрямую отправить UIImage . Затем мы добавляем объект NSData в качестве вложения в нашу электронную почту. Мы устанавливаем тип изображения png и имя файла «mobiletutsImage». Это означает, что когда получатель сохраняет изображение, оно будет сохранено под именем «mobiletutsImage». Последнее, что мы делаем, это показываем почтовую программу перед выпуском почтовой программы.


Вам необходимо вручную закрыть интерфейс почты в ответ на вызов метода делегата. Добавьте следующий код в openMail: action:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
— (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    switch (result)
    {
        case MFMailComposeResultCancelled:
            NSLog(@»Mail cancelled: you cancelled the operation and no email message was queued.»);
            break;
        case MFMailComposeResultSaved:
            NSLog(@»Mail saved: you saved the email message in the drafts folder.»);
            break;
        case MFMailComposeResultSent:
            NSLog(@»Mail send: the email message is queued in the outbox. It is ready to send.»);
            break;
        case MFMailComposeResultFailed:
            NSLog(@»Mail failed: the email message was not saved or queued, possibly due to an error.»);
            break;
        default:
            NSLog(@»Mail not sent.»);
            break;
    }
 
        // Remove the mail view
    [self dismissModalViewControllerAnimated:YES];
}

В этом методе делегата мы проверяем результат отображения контроллера представления почты с помощью оператора switch, а затем отклоняем контроллер представления с анимацией. В приведенном выше коде я просто напечатал сообщение NSLog с результатами, но дело в том, что вы можете динамически реагировать на действия пользователя.


На iPad выглядит красиво показать интерфейс почты в презентации на странице. Вы можете сделать это, добавив следующую строку кода чуть выше [self presentModalViewController:mailer animated:YES]; :

1
mailer.modalPresentationStyle = UIModalPresentationPageSheet;
почтовый интерфейс iPad

Я надеюсь, вам понравился этот урок. Если у вас есть какие-либо отзывы или запросы на дополнительный контент для iOS от меня, пожалуйста, оставьте комментарий ниже!