How to send an email to a receipent in background in iOS5?

后端 未结 8 563
不知归路
不知归路 2020-12-10 15:41

In an iPhone app,I want to send an email to a person who has forgotten about their passcode . I want to send the mail in background (cant use MFMailComposeViewController for

8条回答
  •  Happy的楠姐
    2020-12-10 15:53

    The best way of doing this is using SKPSMTPMessage. You can download it from here: https://github.com/jetseven/skpsmtpmessage This is a very easy solution that I have used before for using "Forgot Password" solutions in iOS apps. To implement simply drag the downloaded files into your application, #import the the "SKPSMTPMessage.h" into your class, and implement the following code:

    .h

    #import "SKPSMTPMessage.h"
    
    @interface SomeView : UIViewController  {
    
    }
    
    - (IBAction)forgotPassword;
    

    .m

    - (IBAction)forgotPassword {
    SKPSMTPMessage *forgotPassword = [[SKPSMTPMessage alloc] init];
    [forgotPassword setFromEmail:@"some-email@gmail.com"];  // Change to your email address
    [forgotPassword setToEmail:@"user-email@gmail.com"]; // Load this, or have user enter this
    [forgotPassword setRelayHost:@"smtp.gmail.com"];
    [theMessage setRequiresAuth:YES]; // GMail requires this
    [forgotPassword setLogin:@"some-email@gmail.com"]; // Same as the "setFromEmail:" email
    [forgotPassword setPass:@"password"]; // Password for the Gmail account that you are sending from
    [forgotPassword setSubject:@"Forgot Password: My App"]; // Change this to change the subject of the email
    [forgotPassword setWantsSecure:YES]; // Gmail Requires this
    [forgotPassword setDelegate:self]; // Required
    
    NSString *newpassword = @"helloworld";
    
    NSString *message = [NSString stringWithFormat:@"Your password has been successfully reset. Your new password: %@", newpassword];
    NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain", kSKPSMTPPartContentTypeKey, message, kSKPSMTPPartMessageKey, @"8bit" , kSKPSMTPPartContentTransferEncodingKey, nil];
    
    [forgotPassword setParts:[NSArray arrayWithObjects:plainPart, nil]];
    [forgotPassword send];
    }
    

    Also be sure to include the following methods in the .m. You can change the contents of the UIAlertViews depending on what you want to display to the user.

    - (void)messageSent:(SKPSMTPMessage *)message {
        NSLog(@"Message Sent");
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Password Reset" message:@"Check your email for your new password." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    }
    
    - (void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error {
        NSLog(@"Message Failed With Error(s): %@", [error description]);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"There was an error reseting your password. Please try again later." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    }
    

    You also need to do the following before this will work. Your Target -> Get Info -> Build -> All Configurations -> Other Link Flags: "-ObjC" If you need help with this, see http://developer.apple.com/qa/qa2006/qa1490.html

    EDIT: * CFNetwork.framework must also be added for this to work! *

    Let me know if you have any more questions.

    Thanks, Jacob

提交回复
热议问题