L'SDK di iOS ha reso davvero facile inviare e-mail utilizzando le API integrate. Con poche linee di codici, puoi lanciare la stessa interfaccia di posta elettronica dell'app di posta che ti consente di comporre un'email. È possibile comporre il modulo Compositore posta, scrivere un messaggio e inviare posta semplice o file allegati tramite la classe MFMailComposeViewController. Per maggiori informazioni: Invio di e-mail dalla tua app iOS
Ma, in questa sezione, quello che sto per spiegare riguarda l'invio di e-mail senza mostrare il foglio di posta elettronica, ad esempio. inviare e-mail in background. Per questa funzione, non possiamo utilizzare la classe nativa MFMailComposer di iOS perché non ci consente di inviare e-mail in background, ma fa apparire la vista del compositore di posta da dove l'utente deve toccare il pulsante "invia", quindi per questa sezione ho intenzione di utilizzare la libreria SKPSMTPMessage per inviare e-mail in background, tuttavia l'account e-mail deve essere hardcoded su questo metodo.
Limitazioni:
mittente/destinatario indirizzo e-mail deve essere hardcoded o si deve afferrare utilizzando un po 'pop up forma nel vostro app in cui l'indirizzo input dell'utente mittente/destinatario e-mail. Inoltre, le credenziali dell'account mittente devono essere anche codificate in quanto non è possibile recuperarle dalle impostazioni del dispositivo.
Metodo:
- Importa CFNetwork.framework al progetto.
- Includi #import "SKPSMTPMessage.h" #import "NSData + Base64Additions.h" // per la codifica Base64
- Includere al ViewController
- Scarica libreria SKPSMTPMessage da
https://github.com/jetseven/skpsmtpmessage
Drag and Drop Cartella "SMTPLibrary" che hai scaricato nel tuo progetto.
Prima di procedere, informarsi che sto utilizzando l'indirizzo e-mail del mittente/destinatario e la password del mittente con codice hardcoded nel codice per questo esempio.Ma puoi prendere queste credenziali dall'utente, permettendogli di inserire in una sorta di moduli (usando UIViews).
-(void) sendEmailInBackground {
NSLog(@"Start Sending");
SKPSMTPMessage *emailMessage = [[SKPSMTPMessage alloc] init];
emailMessage.fromEmail = @"[email protected]"; //sender email address
emailMessage.toEmail = @"[email protected]"; //receiver email address
emailMessage.relayHost = @"smtp.gmail.com";
//emailMessage.ccEmail [email protected]"your cc address";
//emailMessage.bccEmail [email protected]"your bcc address";
emailMessage.requiresAuth = YES;
emailMessage.login = @"[email protected]"; //sender email address
emailMessage.pass = @"Passwxxxx"; //sender email password
emailMessage.subject [email protected]"@"email subject header message";
emailMessage.wantsSecure = YES;
emailMessage.delegate = self; // you must include <SKPSMTPMessageDelegate> to your class
NSString *messageBody = @"your email body message";
//for example : NSString *messageBody = [NSString stringWithFormat:@"Tour Name: %@\nName: %@\nEmail: %@\nContact No: %@\nAddress: %@\nNote: %@",selectedTour,nameField.text,emailField.text,foneField.text,addField.text,txtView.text];
// Now creating plain text email message
NSDictionary *plainMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey, messageBody,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
emailMessage.parts = [NSArray arrayWithObjects:plainMsg,nil];
//in addition : Logic for attaching file with email message.
/*
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"JPG"];
NSData *fileData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *fileMsg = [NSDictionary dictionaryWithObjectsAndKeys:@"text/directory;\r\n\tx- unix-mode=0644;\r\n\tname=\"filename.JPG\"",kSKPSMTPPartContentTypeKey,@"attachment;\r\n\tfilename=\"filename.JPG\"",kSKPSMTPPartContentDispositionKey,[fileData encodeBase64ForData],kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
emailMessage.parts = [NSArray arrayWithObjects:plainMsg,fileMsg,nil]; //including plain msg and attached file msg
*/
[emailMessage send];
// sending email- will take little time to send so its better to use indicator with message showing sending...
}
Ora, movimentazione metodi delegato:
// In caso di successo
-(void)messageSent:(SKPSMTPMessage *)message{
NSLog(@"delegate - message sent");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message sent." message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
// Sulla mancata
-(void)messageFailed:(SKPSMTPMessage *)message error:(NSError *)error{
// open an alert with just an OK button
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error!" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
NSLog(@"delegate - error(%d): %@", [error code], [error localizedDescription]);
}
Ok, questo è tutto dalla parte di codifica . spero che questo tutorial possa trovare utile per voi guyz
Potete per favore fornire maggiori dettagli sulla risposta? Ci sono campioni disponibili su questo? Sto anche lottando per l'invio di posta. Grazie. – Gopinath
come ho detto, senza il consenso degli utenti non è possibile inviare e-mail dai dispositivi iOS. quindi cos'altro vuoi? –
Sì, ho capito. Grazie. – Gopinath