发送电子邮件而不显示视图

时间:2015-05-22 10:56:50

标签: ios objective-c iphone

我需要发送电子邮件而不显示MFMailComposeViewController简而言之,我需要直接发送电子邮件而无需用户按下发送按钮并显示视图。

我的代码是:

MFMailComposeViewController *mail = [[MFMailComposeViewController  >alloc]   init];
mail.mailComposeDelegate = self;
[mail setSubject:@"Recordatorio de clave"];
[mail setMessageBody:message isHTML:NO];
[mail setToRecipients:@[email]];
[self presentModalViewController:mail animated:YES];

7 个答案:

答案 0 :(得分:4)

我的回答是,您可以在不显示MFMailComposeVC的情况下从后台发送电子邮件 有两种方法可以做到这一点

1-编写一个Web服务,将在调用时从后台发送电子邮件 2-您可以使用SMTP gmail帐户发送电子邮件。为此,您必须使用SKPSMTPMessage库。这是一个很好的tutorial

答案 1 :(得分:2)

如果您不想使用MFMailComposeViewController,可以使用SMTP进行此操作。请查看此链接Sending e-mail in background from iOS apps using SMTP gmail account

答案 2 :(得分:1)

MFMailComposeViewController

无法做到这一点

您可以创建Web服务并将数据传递给它,您的服务器也可以发送邮件。

答案 3 :(得分:1)

您不能直接使用MFMailComposeViewController因为需要外部库或程序需要我们使用SMTP发送邮件这里我通过发送邮件提到gmail而没有用户交互。

.h文件的代码

#import <UIKit/UIKit.h>
#import "SKPSMTPMessage.h"
@interface mailTransferViewController : UIViewController<SKPSMTPMessageDelegate>{
    IBOutlet UITextField *emailField;
}
- (IBAction)sendMessageInBack:(id)anObject;
@end

.m文件的代码

- (IBAction)sendMessageInBack:(id)anObject{

    NSLog(@"Start Sending");
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.pdf"];
    NSData *dataObj = [NSData dataWithContentsOfFile:writableDBPath];
    SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];
    testMsg.fromEmail = @"Yours mail ids";
    testMsg.toEmail = emailField.text;//sender mail id
    testMsg.relayHost = @"smtp.gmail.com";
    testMsg.requiresAuth = YES;
    testMsg.login = @"Your mail ids";
    testMsg.pass = @"Mail id password";
    testMsg.subject = @"Test application ";
    testMsg.wantsSecure = YES; // smtp.gmail.com doesn't work without TLS!
    // Only do this for self-signed certs!
    // testMsg.validateSSLChain = NO;
    testMsg.delegate = self;
    NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey,@"Some text to include in body",kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
    //Logic for attach file.
//  NSDictionary *vcfPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx-unix-mode=0644;\r\n\tname=\"sample.pdf\"",kSKPSMTPPartContentTypeKey,@"attachment;\r\n\tfilename=\"sample.pdf\"",kSKPSMTPPartContentDispositionKey,[dataObj encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
//    NSLog(@"%@",vcfPart);
//  testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil];
//    testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil];

    testMsg.parts = [NSArray arrayWithObjects:plainPart,nil];
    [testMsg send];
}

答案 4 :(得分:0)

,无法发送邮件。在iOS中,您不能执行此类操作,您必须编写基于Web的API来执行此操作。

答案 5 :(得分:0)

用户只能拥有从设备发送邮件的许可证。您只能撰写电子邮件。如果您必须存档此类功能​​,只需在后端上创建它,并通过调用webservice从设备触发它。

答案 6 :(得分:0)

无需用户干预,从iphone应用程序以编程方式发送电子邮件,无法使用任何Apple框架实现。有可能在越狱手机中,但它永远不会看到App Store的内部。

如果您想控制电子邮件发送,那么更好的方法是设置一个Web服务(在您的服务器端),您可以使用HTTP请求发布。如果您只发布到一个地址,这可以很好地工作,尽管您可能希望让用户输入他们的回邮地址。

否则只有标准对话框可用(这依赖于使用他们在设备上设置的任何帐户)。