Невозможно отправить электронную почту через мое приложение

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

- (IBAction)btnsendPressAction:(id)sender {

    if([MFMailComposeViewController canSendMail]){

        MFMailComposeViewController *mailer=[[MFMailComposeViewController alloc]init];
        mailer.mailComposeDelegate=self;
        [mailer setSubject:@"A Message for testing"];
      NSArray *toRecipients = [NSArray arrayWithObjects:@"[email protected]", @"[email protected]", nil];
        [mailer setToRecipients:toRecipients];

        UIImage *image=[UIImage imageNamed:@"logo.png"];
        NSData *imageData=UIImagePNGRepresentation(image);
        [mailer addAttachmentData:imageData mimeType:@"image/png" fileName:@"logo.png"];
        NSString *emailBody=@"This is test email";
        [mailer setMessageBody:emailBody isHTML:NO];
        [self presentModalViewController:mailer animated:YES];
        mailer.modalPresentationStyle = UIModalPresentationPageSheet ;


    }
    else{

        UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"failure" message:@"Alert" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    }
}

Моя проблема в том, что делегат mailComposeController не вызывается, и я не могу отправить электронное письмо через свое приложение. Я прошел через множество ссылок, но везде я нашел один и тот же метод. Может ли кто-нибудь помочь мне в этом?


person Raj    schedule 28.08.2012    source источник
comment
Я также добавил правильный метод для делегата в свой код, который я не поместил здесь.   -  person Raj    schedule 28.08.2012
comment
Проверьте, настроен ли почтовый идентификатор на используемом вами устройстве.   -  person Dhruv    schedule 28.08.2012
comment
Я тестирую свой симулятор, и могу ли я узнать, как его настроить?   -  person Raj    schedule 28.08.2012
comment
Хорошо, вы не сможете отправлять почту через симулятор и настраивать на устройстве: support.apple.com/kb/ ht4810   -  person Dhruv    schedule 28.08.2012
comment
Это означает, что я не смогу проверить это в симуляторе ??   -  person Raj    schedule 28.08.2012
comment
Нет, ознакомьтесь с предоставленными вам ответами, это обязательно поможет вам. :)   -  person Dhruv    schedule 28.08.2012
comment
Но у него есть проблема, что его делегат не вызывается? Вы не можете отправить электронное письмо, но вы можете проверить его.   -  person Michal Zaborowski    schedule 28.08.2012


Ответы (4)


Вы не сможете отправлять электронную почту из Simulator. Вы можете проверить эту функцию только на устройстве iOS с любой учетной записью, настроенной в почтовом приложении.

person BornCoder    schedule 28.08.2012
comment
Хорошо, я проверю это на реальном устройстве один раз и свяжусь с вами. - person Raj; 28.08.2012
comment
да ладно. Мне может потребоваться некоторое время, чтобы протестировать его на устройстве, потому что на данный момент у меня нет устройства. - person Raj; 28.08.2012
comment
Он работал правильно на устройстве, но изображение, которое я хотел прикрепить, не прикрепилось. - person Raj; 28.08.2012
comment
В симуляторе я смогу отправить почту, но фактическая почта не отправляется на почтовый адрес получателя. То есть все выглядит нормально, только почта не будет доставлена. - person Raj; 28.08.2012

Здесь используйте эту ссылку и добавьте ( настроен) учетная запись в устройстве, тогда только вы можете отправлять почту.

person Sanoj    schedule 28.08.2012
comment
И это позволит вызвать делегата, не так ли? - person trojanfoe; 28.08.2012
comment
вы можете использовать этот код, он работает для меня. Вам нужно установить делегата и в то же время подтвердить, что MFMailComposerDelegate.i получил его. Пожалуйста, скажите мне, что в этом не так ?? - person Sanoj; 28.08.2012

Этот фрагмент работает для меня:

if ([MFMailComposeViewController canSendMail]) {
    self.mailController = [[MFMailComposeViewController alloc] init];
    [self.mailController setSubject:@"Invitation"];
    [self.mailController setMessageBody:@"Message" isHTML:NO];
    self.mailController.mailComposeDelegate = self;

    [self presentModalViewController:self.mailController animated:YES];
}

но убедитесь, что вы реализуете делегат в интерфейсе

@interface MyClass() <MFMailComposeViewControllerDelegate>

и проверьте свой метод обратного вызова:

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
}
person Michal Zaborowski    schedule 28.08.2012
comment
Да, это работает на симуляторе, мой делегат вызывается, но вы не будете получать электронную почту на свою учетную запись электронной почты, попробуйте сделать свойство вашего MFMailComposeViewController, возможно, ARC освобождает ваш mailViewController перед отправкой делегата или чего-то еще. Вам не нужен адрес получателя в коде, вы можете выбрать его из адресной книги или ввести вручную. - person Michal Zaborowski; 28.08.2012

эй, я не уверен, но может быть это полезно, замените последнюю строку

mailer.modalPresentationStyle = UIModalPresentationPageSheet ;

с

[self presentModalViewController: mailer animated:YES];
person Hiren    schedule 28.08.2012
comment
Я лично проверил в своем приложении, когда я проверяю код с первой строкой, он не представляет почтовое представление. когда я пробую со своей второй строкой, это лист действий с обувью, и я даже могу отправить письмо. так что это не будет отрицательным ответом - person Hiren; 28.08.2012