Xcode 4 / iOS - Отправить письмо с помощью SMTP из моего приложения - PullRequest
10 голосов
/ 17 августа 2011

Я искал фреймворк, чтобы просто позволить мне отправлять электронную почту из моего приложения.Я попробовал MailCore, Pantomime и SKPSMTP без удачи.Я не могу заставить их скомпилировать в Xcode, поэтому я предположил, что они устарели.Есть ли способ, которым я могу сделать это?Если так, то как?Спасибо.

Ответы [ 4 ]

18 голосов
/ 17 августа 2011

Вы можете легко отправлять электронные письма с вашего устройства iOS. Не нужно реализовывать SMTP и все. Лучшее в использовании встроенных средств электронной почты в iOS - это доступ к адресной книге! Таким образом, он автоматически заполняет имена, адреса электронной почты. Yaaiiii !!

Включите, AddressBook, AddressBookUI и MessageUI фреймворки и напишите что-то вроде этого. Обратите внимание, что вы даже можете отправить контент в формате HTML!

#import <MessageUI/MessageUI.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

MFMailComposeViewController *mailComposer; 
mailComposer  = [[MFMailComposeViewController alloc] init];
mailComposer.mailComposeDelegate = self;
[mailComposer setModalPresentationStyle:UIModalPresentationFormSheet];
[mailComposer setSubject:@"your custom subject"];
[mailComposer setMessageBody:@"your custom body content" isHTML:NO];
[self presentModalViewController:mailComposer animated:YES];
[mailComposer release];

Ради полноты я должен написать этот селектор, чтобы закрыть окно электронной почты, если пользователь нажимает cancel или send -

- (void)mailComposeController:(MFMailComposeViewController*)controller 
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error 
{ 
    if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]);
    [self dismissModalViewControllerAnimated:YES];
    return;
}

Счастливого кодирования ...

6 голосов
/ 02 февраля 2012

Следует отметить, что MFMailComposeViewController имеет метод с именем canSendMail . Если вы не проверите это до представления MFMailComposeViewController на устройстве, у которого нет учетной записи электронной почты, вы получите SIGABRT.

Легко пропустить это при тестировании на устройстве или симуляторе, так как у вас, вероятно, будет учетная запись электронной почты на вашем Mac и iPad.

4 голосов
/ 11 октября 2011

SKPSMTPMessage по-прежнему отлично работает для отправки электронной почты без необходимости использования пользовательского интерфейса.

Убедитесь, что вы добавили ссылку на CFNetwork.framework в свой проект.В противном случае вы получите ошибки сборки.

1 голос
/ 17 августа 2011

Я полагаю, что одобренный Apple способ сделать это состоит в том, чтобы отправить данные на сервер через HTTP Post и заставить сервер генерировать почту для вас.Я видел, как другие задавали подобные вопросы, и ответ таков: если вы отправляете его с устройства, вам действительно нужно подсказать пользователю.

Я даже могу сказать вам, почему это так: представьте себе приложениекоторый может отправить себя всем в вашей адресной книге без вашего подтверждения, сообщив им, что вы только что установили приложение X, и они тоже должны это сделать.Даже если это будет сделано из лучших побуждений, это может быстро создать огромный шторм SMTP, и, по сути, это будет вирус «Я люблю тебя».

Этого было достаточно для нагрузки в общедоступном интернете, но на беспроводных носителях,может быстро вызвать достаточную перегрузку, чтобы заблокировать службу cel.

Вывод: либо используйте ComposeViewController, как подсказывает @Srikar, либо отправьте данные на сервер и отправьте их оттуда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...