Xcode 4 / iOS-отправка электронной почты с помощью SMTP из моего приложения

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

4 ответов


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

включить 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;
}

удачи в кодировании...


отметим, что MFMailComposeViewController имеет метод под названием canSendMail. Если вы НЕ ПРОВЕРИТЕ ЭТО перед представлением MFMailComposeViewController на устройстве, которое не имеет учетной записи электронной почты, вы получите SIGABRT.

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


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

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


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

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

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

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