5

Desidero inviare posta dalla mia app per iPhone personalizzata. Ho usato MFMailComposeViewController per inviare posta dal mio iphone nella mia app precedente. Ora, non voglio mostrare l'MFMailComposeViewController all'utente, se fanno clic su Send Mail button la posta viene automaticamente inviata allo recipient mail address. Come posso fare questo? Puoi per favore aiutarmi su questo? Grazie in anticipo.Come inviare la posta dall'app iphone senza mostrare MFMailComposeViewController?

Ho usato il codice qui sotto per mostrare la MFMailComposeViewController,

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; 
controller.mailComposeDelegate = self; 
[controller setSubject:@"Details"]; 
[controller setMessageBody:@"Hi" isHTML:NO]; 
[controller setToRecipients:[NSArray arrayWithObjects:@"[email protected]", nil]]; 
[self presentModalViewController:controller animated:YES]; 
[controller release]; 

risposta

13

L'invio di messaggi di posta elettronica a livello di codice, senza l'intervento dell'utente, da un'applicazione per iPhone, non può essere implementato utilizzando uno qualsiasi dei quadri di Apple. Potrebbe essere possibile in un telefono jailbroken ma poi non vedrebbe mai l'interno di App Store.

Se si desidera controllare l'invio di e-mail, un modo migliore sarebbe quello di impostare un servizio Web (sul lato server) che si possa pubblicare utilizzando una richiesta HTTP. Se stai postando solo un indirizzo, questo può funzionare molto bene, anche se potresti voler che l'utente inserisca il suo indirizzo email di ritorno.

Altrimenti è disponibile solo la finestra di dialogo standard (questo si basa sull'utilizzo di qualsiasi account che hanno configurato sul dispositivo).

+0

Potete per favore fornire maggiori dettagli sulla risposta? Ci sono campioni disponibili su questo? Sto anche lottando per l'invio di posta. Grazie. – Gopinath

+0

come ho detto, senza il consenso degli utenti non è possibile inviare e-mail dai dispositivi iOS. quindi cos'altro vuoi? –

+0

Sì, ho capito. Grazie. – Gopinath

3

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:

  1. Importa CFNetwork.framework al progetto.
  2. Includi #import "SKPSMTPMessage.h" #import "NSData + Base64Additions.h" // per la codifica Base64
  3. Includere al ViewController
  4. Scarica libreria SKPSMTPMessage da
    https://github.com/jetseven/skpsmtpmessage
  5. 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

+1

Funziona bene. Ho appena cambiato un codice non ARC. Inoltre, ho modificato le impostazioni dell'account del mittente del mittente su "Consenti l'accesso ad app meno sicure". – Panayot