Con il Tutorial di oggi impareremo a inviare una e-mail dalla nostra applicazione. Dopo aver inserito l’indirizzo del destinatario, l’oggetto e il testo della mail, basterà premere il pulsante “Invia” per far aprire l’applicazione nativa Mail presente in tutti gli iPhone con tutti i campi, passati dalla nostra applicazione, pronti per l’invio al destinatario scelto.
Aprite Xcode e create un nuovo progetto. Dalla solita finestra scegliete il template “View-based Application” e cliccate su “Choose“. Nel campo “Save As” inserite il nome per il programma, ad esempio inviaMail, scegliete la posizione per il vostro progetto, quindi salvate.
Si aprirà la finestra principale di Xcode. Aprite il file dell’interfaccia MailViewController.h e inserite il seguente codice:
#import
@interface MailViewController : UIViewController {
IBOutlet UITextField *txtA;
IBOutlet UITextField *txtOggetto;
IBOutlet UITextView *txtTesto;
}
-(void)invia:(id)sender;
@end
Come potete vedere dal codice abbiamo dichiarato tre oggetti, due UITextField e una UITextView, che andremo poi a collegare ai rispettivi oggetti creati tramite Interface Builder, come avrete intuito dall’istruzione IBOutlet. Abbiamo inoltre dichiarato il metodo “invia” che andremo poi a collegare ad un pulsante creato anch’esso in IB.
A questo punto aprite il file di implementazione della nostra classe MailViewController.m e inserite il codice per il metodo dichiarato nel file .h :
-(void)invia:(id)sender{
NSString *stringaMail = [NSString stringWithFormat:@"mailto:?to=%@&subject=%@&body=%@", [[txtA text] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding], [[txtOggetto text] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding], [[txtTesto text] stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:stringaMail]];
}
Qui non facciamo altro che creare una stringa utilizzando il formato classico del “mailto” usato in HTML per l’invio delle e-mail passando nel modo corretto i campi inseriti dall’utente tramite l’interfaccia grafica: il destinatario, l’oggetto e il testo della mail. Questi vengono infatti prelevati dalle due UITextField e dall’UITextView dichiarati in precedenza e che andremo a creare tramite Interface Builder a breve.
Ricordate di inserire inoltre il metodo per la chiusura della tastiera, se non volete che una volta aperta rimanga nell’interfaccia utente nascondendo eventuali altre sue parti:
// Metodo per far chiudere la tastiera
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
A questo punto non ci resta che aprire il file MailViewController.xib per creare la nostra interfaccia grafica e i rispettivi collegamenti con la classe.
Trascinate nella View i seguenti oggetti:
- N. 2 UITextField
- N. 1 UITextView
- N. 3 UILabel
- N. 1 UIButton
Modificate la loro posizione e le loro proprietà in modo da ottenere una vista simile a quella mostrata in figura:

(Ricordate di mettere la spunta sulla proprietà “Editable” della UITextView, che usiamo per semplice comodità al posto di una terza UITextField).
Cliccate quindi su File’s Owner e dalla finestra “Connection” collegate txtA con la UITextField dove andrà inserito il destinatario, txtOggetto con quella dove si inserirà l’oggetto della mail e txtTesto con la UITextView (editabile) dove l’utente inserirà il testo vero e proprio della mail.
Collegate quindi il metodo Invia: con il pulsante creato facendo attenzione a selezionare “Touch Up Inside” una volta rilasciato il mouse sull’UIButton.
Ricordare infine di collegare, come già visto nel Tutorial 02, gli outlet delle UIText con File’s Owner per far sparire la tastiera quando non serve.
A questo punto salvate, tornate a Xcode e cliccate su “Build and Run” per testare la vostra applicazione.
Tenete presente che occorre avere l’applicazione Mail con un account di posta configurato per una corretta esecuzione dell’applicazione che funzionerà perfettamente se installato direttamente su iPhone. Nella prossima immagine il programma in esecuzione.

Video Tutorial
by David Pollak
Parte 1
Parte 2












10 Responses to “T#004 – Inviare una e-mail”
26 Novembre 2009
T#012 – Inviamo e-mail dalle nostre Applicazioni | devAPP[…] tutorial “T#004 – Inviare una e-mail” avevamo visto come inviare una mail da iPhone, passando destinatari, oggetto e corpo del […]
12 Marzo 2010
devAPP | Impara a programmare il tuo iPhone | devAPP[…] Tutorial 04 (invio di una mail tramite sharedApplication) […]
13 Marzo 2010
iManuTanto per iniziare voglio complimentarmi per i tutorial, veramente ben fatti e sopratutto utili.
Ho provato a fare questa App, tutto funziona tranne una cosa: il trucco per far chiudere la tastiera. Cioè, sui due oggetti “UITextField” funziona correttamente ma sul oggetto “UITextView” no, premendo return il cursore passa alla riga successiva.
Nel codice si scrive:
// Metodo per far chiudere la tastiera
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
Viene apertamente fatto riferimento alla “UITextField”, dove funziona, ma per la UITextView??? Non è possibile chiudere la tastiera? Quindi sarebbe meglio mettere il tasto “invia” nella parte alta della pagina in modo che non venga coperto?
29 Marzo 2010
Video Tutorial di programmazione iPhone SDK (in italiano) | devAPP[…] Con il Tutorial di oggi impareremo a inviare una e-mail dalla nostra applicazione. Dopo aver inserito l’indirizzo del destinatario, l’oggetto e il testo della mail, basterà premere il pulsante “Invia” per far aprire l’applicazione nativa Mail presente in tutti gli iPhone con tutti i campi, passati dalla nostra applicazione, pronti per l’invio al destinatario scelto. (visualizza l’articolo completo) […]
13 Maggio 2010
vittorinnovo la domanda del commento precedente..?
4 Giugno 2010
fabriziociao,
ho trovato questo in rete e funziona:
– (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
if ( [ text isEqualToString: @”\n” ] ) {
[ textView resignFirstResponder ];
return NO;
}
return YES;
}
23 Novembre 2010
FulvioCome mai per usare il metodo “-(BOOL)textFieldShouldReturn:(UITextField *)textField”, non si deve adottare il protocollo “UITextFieldDelegate”???
6 Dicembre 2010
devAPP – Tutorial Set #1 - iPhone Italia – Il blog italiano sull'Apple iPhone 4, iPhone 3GS e 3G[…] (Vai al tutorial completo) […]
11 Gennaio 2012
NicolaCiao volevo sapere come faccio a capire se funziona o meno…. io utilizzo solo il simulatore e alla pressione del Button “invia” non mi fa nulla…..
15 Aprile 2012
andreaComplimenti, molto utile.
Sarebbe il massimo aggiornare tutto all ultima release di Xcode