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

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

Ответ 1

Вы можете легко отправлять письма с устройства 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;
}

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Заключение: либо используйте ComposeViewController, как предлагает @Srikar, либо POST-данные на ваш сервер, и отправляйте его оттуда.