如何在应用程序关闭时从后端发送电子邮件?

时间:2012-05-28 05:22:17

标签: iphone ios ios5 iphone-sdk-3.0 xcode4.2

我正在制作一个电子邮件应用程序,用户可以设置发送电子邮件的时间吗? 我可以在用户选择的时间在后台进程中发送电子邮件,但仅在应用程序打开时,在UILocalNotification的帮助下。 但我想在用户关闭应用程序时发送电子邮件。 例如:用户选择了10分钟后发送邮件的时间,并在此之前关闭了他的应用程序。

请帮帮我

以下是我的代码:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{

    NSLog(@"didReceiveLocalNotification");

    NSLog(@"\nNotification dic = %@ %@",notification.userInfo,notification.alertBody);

    dictUser=notification.userInfo;
    [dictUser retain];

    NSLog(@"dictuser124:%@",dictUser);
    [dictUser retain];

    if ([str_info4 isEqualToString:@"0"]) 
    {
        [self sendEMAIL];
    }
    else if ([str_info4 isEqualToString:@"1"]) 
    {
        [self sendSMS];
    }

}

-(void)sendEMAIL
{
    [dictUser retain];

    SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];


    //testMsg.fromEmail = @"Lexi mobile";//nimit51parekh@gmail.com

    testMsg.fromEmail = str_uname;
    NSLog(@"str_Uname=%@",testMsg.fromEmail);

    str_info = [str_info stringByReplacingOccurrencesOfString:@"," withString:@""];
    testMsg.toEmail = str_info;
    NSLog(@"autoemail=%@",testMsg.toEmail);


    testMsg.relayHost = @"smtp.gmail.com";


    testMsg.requiresAuth = YES;


    testMsg.login = str_uname;
    NSLog(@"autoelogin=%@",testMsg.login);

    testMsg.pass = str_password;
    NSLog(@"autopass=%@",testMsg.pass);

    testMsg.subject = @"Schedule Sms And Email";


    testMsg.wantsSecure = YES; 

    NSString *sendmsg=[[NSString alloc]initWithFormat:@"%@",str_info2];
    NSLog(@"automsg=%@",sendmsg);

    testMsg.delegate = self;


    NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey,

                             sendmsg,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];

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


    [testMsg send];

   // [self DeleteRowAfterSending];
    [self performSelector:@selector(DeleteRowAfterSending) withObject:nil afterDelay:5.0];
}



-(void)messageSent:(SKPSMTPMessage *)message

{
    [message release];

    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Success" message:@"Your email is sent successfully" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];

    [alert show];

    [alert release];

    NSLog(@"delegate - message sent");

}

-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{

    [message release];

    // open an alert with just an OK button

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fail" message:@"Message sending failure" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];

    [alert show];

    [alert release];


    NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]);

}

3 个答案:

答案 0 :(得分:1)

据我所知,一旦应用关闭,您就无法进行任何操作。您可以在后端SERVER端进行此操作以自动执行操作。

答案 1 :(得分:0)

如果已经关闭,则无法“安排”从应用发送的电子邮件。您最好的选择是在后端服务器上处理所有这些内容。该应用程序存储消息应发送给谁,何时,何地,何地。设置一个cronjob,用于轮询需要发送的消息队列,如果预定的时间匹配,则发送电子邮件。

答案 2 :(得分:0)

据我所知,我知道当应用程序关闭时不可能执行某些操作,并且没有可用的应用程序实例。

我宁愿建议使用后端的SERVER来实现推送通知。您可以将时间保存在用户必须发送电子邮件的数据库中,并相应地编写CRONS以便在该时刻发送电子邮件。