2015-02-19 3 views
-1

У меня есть вопрос относительно MFMailComposeViewController в программировании на iOS. Я довольно новичок в языке, и моя цель - отправить скрытое письмо через приложение, которое я создаю. Я хотел бы, чтобы письмо отправлялось без необходимости нажатия кнопки отправки, которая появляется при появлении диалогового окна электронной почты. Как я могу отправить электронное письмо без открытия диалога вообще?Objective-C: Отправка скрытой электронной почты

Ниже мой код:

//Sending Mail 
    -(IBAction)sendemail:(id)sender 
    { 
     if ([MFMailComposeViewController canSendMail]) 
     { 
      MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init]; 
      mail.mailComposeDelegate = self; 
      [mail setSubject:@"Sample Subject"]; 
      [mail setMessageBody:@"Here is some main text in the email!" isHTML:NO]; 
      [mail setToRecipients:@[@"[email protected]"]]; 

      [self presentViewController:mail animated:YES completion:NULL]; 
     } 
     else 
     { 
      NSLog(@"This device cannot send email"); 
     } 
    } 

    - (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error 
    { 
     switch (result) { 
      case MFMailComposeResultSent: 
       NSLog(@"You sent the email."); 
       break; 
      case MFMailComposeResultSaved: 
       NSLog(@"You saved a draft of this email"); 
       break; 
      case MFMailComposeResultCancelled: 
       NSLog(@"You cancelled sending this email."); 
       break; 
      case MFMailComposeResultFailed: 
       NSLog(@"Mail failed: An error occurred when trying to compose this email"); 
       break; 
      default: 
       NSLog(@"An error occurred when trying to compose this email"); 
       break; 
     } 

     [self dismissViewControllerAnimated:YES completion:NULL]; 
    } 

Заранее спасибо всем, кто ответы. Я очень ценю это.

+3

Вы не можете сделать это (по уважительной причине) с MFMailComposeViewController. Вы можете использовать некоторые другие службы электронной почты/сообщений в своем приложении, но вы не сможете отправлять их с помощью учетных данных пользователя - если они не сообщают ваш адрес электронной почты, и вы используете это как «от» – Paulw11

+0

Спасибо за ваш ответ, но если я не могу использовать MFMailComposeViewController, то что я могу использовать для этого? Есть ли другой способ отправить электронную почту без появления диалогового окна? – iProgramIt

+0

Поймите, почему это не разрешено. Apple не хочет, чтобы у вас была возможность отправить электронное письмо, которое «от» пользователя и которое пользователь не видел и не одобрил. –

ответ

3

MFMailComposeViewController .... моя цель состоит в том, чтобы отправить скрытую Отправить по электронной почте

Эти цели противоречат друг другу. Если вы хотите тайно отправить электронное письмо от пользователя, то не использовать MFMailComposeViewController. Вам нужно будет научить ваше приложение SMTP и отправлять электронную почту самостоятельно, используя низкоуровневые сети. (И если Apple узнает, что вы это делаете, они, я надеюсь, выберут ваше приложение прямо из магазина.)

+0

Я понимаю, что вы говорите, но как многие другие разработчики приложений делают то, что я пытаюсь выполнить? Должно быть какое-то другое «более легкое» решение. – iProgramIt

+0

Я не думаю, что есть проблемы с приложением, отправляющим электронное письмо * per se *, если оно происходит от «[email protected]», а не «[email protected]» без моего ведома/разрешения. Вы можете использовать библиотеку, такую ​​как MailCore - http://libmailcore.com, вместо того, чтобы начинать с нуля с помощью SMTP-клиента. – Paulw11

+0

Спасибо. В моем конкретном приложении целью является анонимность. Я бы предпочел использовать диалог. Есть ли способ изменить код, который я вставил выше, чтобы соответствовать вашему предложению? – iProgramIt

0

Apple не позволит вам скрыть MFMailComposeViewController. Чтобы отправить электронное письмо, вам необходимо использовать веб-службу.

Используйте NSURLRequest и NSURLConnection для отправки запроса на веб-сервер, который принимает полезную нагрузку данных JSON, которая представляет адрес электронной почты, который вы хотите отправить. Затем веб-сервер анализирует данные, выполняет необходимую проверку и обработку, а затем отправляет сам адрес электронной почты или взаимодействует с сторонней почтовой службой. Вы также можете попытаться вырезать сервер среднего человека и напрямую взаимодействовать с сторонней почтовой службой непосредственно из приложения, однако могут возникнуть некоторые проблемы для этого подхода, а именно безопасность вашего токена API, испеченного в самом приложении, может выставлять свою стороннюю учетную запись для злоупотребления.

Пример кода из Mailgun Objective-C SDK:

Mailgun *mailgun = [Mailgun clientWithDomain:@"samples.mailgun.org" apiKey:@"key-3ax6xnjp29jd6fds4gc373sgvjxteol0"]; 
[mailgun sendMessageTo:@"Jay Baird <[email protected]>" 
        from:@"Excited User <[email protected]>" 
       subject:@"Mailgun is awesome!" 
        body:@"A unicode snowman for you! ☃"]; 
+0

Спасибо за предложение! Есть ли место, где я мог бы узнать, как это сделать? Я не изучил этот материал. :) – iProgramIt

+0

Получите учетную запись Mailgun (через Rackspace) и попробуйте их iOS Objective-C SDK: https://github.com/rackerlabs/objc-mailgun – ozz

+0

Спасибо! Есть ли встроенные API, которые могут помочь мне решить мою проблему? Я бы предпочел держаться подальше от сторонних загрузок. – iProgramIt

Смежные вопросы