13 июля 2010 г.

Отсылка почты из вашего приложения встроенным клиентом Mail в iOS

Вот решил написать несколько статей по программированию под iPhone/iPod Touch/iPad.
Для начала выбрал простенькую тему описывающуюся одним классом в SDK и несколькими методами. Итак, отсылка почты из вашего приложения встроенным клиентом Mail.
Работу отсылки почты осуществляет класс MFMailComposeViewController наследник от стандартного UIViewController-а. Первое, что необходимо сделать, это подключить к вашему проекту фраемворк MessageUI.

Потом подключить описание этого фраемворка.

Теперь можно кодить.

  1. // Перед тем как вызывать диалог отсылки почты необходимо проверить настроен ли у пользователя вообще почтовый клиент.
  2. if (![MFMailComposeViewController canSendMail])
  3. {
  4.   // Клиент не настроен, показываем всплывающее окно.
  5.  UIAlertView *tmp = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Warning", @"") message:NSLocalizedString(@"Your e-mail application not configured", @"") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles:nil];
  6.  [tmp show];
  7.  [tmp release];
  8.  return ;
  9. }
  10.  // создаем экземпляр обекта MFMailComposeViewController
  11. MFMailComposeViewController *mcvc = [[MFMailComposeViewController alloc] init];
  12.  // указываем обект делегата (слушателя)
  13. mcvc.mailComposeDelegate = self;
  14.  // заполняем поле "Кому"
  15. [mcvc setToRecipients:[NSArray arrayWithObject:@"test@example.com"]];
  16.  // заполняем поле "Тема"
  17. [mcvc setSubject:NSLocalizedString(@"Testing mail", @"")];
  18.  // пишем тело письма
  19. [mcvc setMessageBody:NSLocalizedString(@"This is body of mail", @"") isHTML:NO];
  20.  // прикрепляем к письму данные как текст и указываем имя файла приложения к письму
  21. [mcvc addAttachmentData:[@"Text on attach" dataUsingEncoding: NSUTF8StringEncoding] mimeType:@"text/plain" fileName:@"test.txt"];
  22.  // показываем заполненный контрол
  23. [self presentModalViewController:mcvc animated:YES];

Нужно помнить, что контрол сам не убирается после нажатия кнопки "Отправить", поэтому в методе слушателе (mailComposeController:didFinishWithResult:error:) закроем наш контрол:

  1. - (void) mailComposeController:(MFMailComposeViewController*) controller didFinishWithResult:(MFMailComposeResult) result error:(NSError*) error
  2. {
  3.  [controller dismissModalViewControllerAnimated:YES];
  4. }

Проект для xCode можно скачать.

Комментариев нет:

Отправить комментарий