• Forum
  • Programmazione Android
  • Corsi in aula

Logo

Navigation
  • Home
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica
    • iPad
    • News
    • Video Tutorial
  • Applicazioni iPhone
    • Le applicazioni dei nostri autori
    • Le applicazioni dei nostri utenti
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#012 – Inviamo e-mail dalle nostre Applicazioni

By Redazione | on 26 novembre 2009 | 15 commenti
Tutorial Pratici

t012_IS02 Nel tutorial “T#004 – Inviare una e-mail” avevamo visto come inviare una mail da iPhone, passando destinatari, oggetto e corpo del messaggio dalla nostra applicazione a quella nativa, Mail, di iPhone. Ovviamente questo metodo è un po’ scomodo, in quanto porta alla chiusura del nostro programma in esecuzione per poter aprire Mail ed inviare così il messaggio di posta. Sta di fatto che questa è comunque l’unica soluzione per chi ha ancora un iPhone con firmware precedente alla versione 3.0. E’ infatti da questa versione del firmware che è stata aggiunta la possibilità di implementare l’invio diretto delle e-mail dalle nostre Applicazioni. Grazie al framework “MessageUI.framework” e poche righe di codice potremo quindi inviare e-mail direttamente dalle nostre applicazioni senza uscire dal programma.

Partiamo quindi con il nostro tutorial:

  • Apriamo Xcode e creiamo un nuovo progetto
  • Dall’elenco dei template disponibili scegliamo “View-based Application” e proseguiamo
  • Date un nome all’applicazione, ad esempio “inAppMail”
  • Scegliete dove salvare il programma e proseguite

Prima di iniziare a scrivere codice dovremo inserire il framework “MessageUI.framework”. Per farlo seguite questi semplici passi:

  • Cliccate con il pulsante destro del mouse su “Frameworks” in “Groups & Files”
  • Cliccate su “Add”, quindi su “Existing Frameworks…”
  • Dalla nuova finestra cercate e selezionate “MessageUI.framework” e cliccate infine su “Add”

Apriamo ora il file “inAppMailViewController.h” e inseriamo il seguente codice:

#import 
#import 

@interface inAppMailViewController : UIViewController  {

}

-(IBAction)inviaMail;

@end

Non abbiamo fatto altro che importare “MessageUI/MessageUI.h” per poter utilizzare ciò che ci offre il nuovo framework, abbiamo aggiunto i protocolli “MFMailComposeViewControllerDelegate” e “UINavigationControllerDelegate” e abbiamo dichiarato infine un metodo di tipo IBAction, che collegheremo ad un oggetto UIButton creato più avanti con Interface Builder, di nome “inviaMail”.

Apriamo ora il file “inAppMailViewController.m” e inseriamo il seguente codice:

-(IBAction)inviaMail{
	MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
	mail.mailComposeDelegate = self;
	
	if([MFMailComposeViewController canSendMail]){
		[mail setToRecipients:[NSArray arrayWithObjects:@"info@devapp.it", nil]];
		[mail setSubject:@"Oggetto della mail"];
		[mail setMessageBody:@"Corpo del messaggio della nostra e-mail" isHTML:NO];
		[self presentModalViewController:mail animated:YES];
	}
	
	[mail release];
}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

	[self dismissModalViewControllerAnimated:YES];
	
	if (result == MFMailComposeResultFailed){
		UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Messaggio non inviato!" message:@"Non è stato possibile inviare la tua e-mail" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:nil];
		
;
; } }

Con il primo metodo, “inviaMail”, creiamo un oggetto di tipo “MFMailComposeViewController” di nome “mail”, settiamo il suo delegato a self e verifichiamo se la mail può essere inviata. In caso affermativo settiamo destinatari, oggetto e corpo del messaggio via codice (anche se potremmo tranquillamente creare un’interfaccia grafica e lasciare all’utente il compito di compilare questi campi) e apriamo tramite una semplice animazione la ModalViewController che conterrà il nostro messaggio pronto per l’invio.

Il secondo metodo serve semplicemente a farci tornare alla nostra applicazione una volta inviato il messaggio e in caso di errore durante l’invio, a restituirci un messaggio di alert che ci indica quanto appena accaduto. Per quanto riguarda il codice è tutto.

Apriamo ora Interface Builder facendo doppio click sul file “inAppMailViewController.xib”. Trasciniamo quindi nella view un oggetto UIButton, modifichiamo la sua proprietà “Title” in “INVIA E-MAIL” e clicchiamo su “File’s Owner”. Colleghiamo quindi il metodo “inviaMail” con il pulsante appena creato facendo attenzione a scegliere “Touch up inside” dall’elenco che ci appare rilasciando il mouse sull’UIButton. Il risultato, “abbellimenti estetici” a parte, è una semplice vista con un pulsante al suo interno:


t012_IB

Salviamo e chiudiamo Interface Builder. Da Xcode clicchiamo su “Build and Run” e testiamo la nostra applicazione. L’invio vero e proprio della mail sarà possibile solo se l’applicazione viene testata da un dispositivo, tramite iPhone Simulator dovremo accontentarci di vedere la mail pronta per l’invio al click del pulsante. Di seguito due immagine dell’applicazione durante l’esecuzione:


t012_IS01


t012_IS02

Se voleste inserire un allegato, ad esempio un’immagine contenuta nel vostro progetto, dovrete inserire prima dell’istruzione [self presentModalViewController:mail animated:YES]; il seguente codice:

UIImage *img = [UIImage imageNamed:@"background.png"];
NSData *myData = UIImageJPEGRepresentation(img ,1.0);
[mail addAttachmentData:myData mimeType:@"image/png" fileName:@"image.jpeg"];

Dove in imageNamed dovete mettere il nome della vostra immagine, nel nostro esempio background.png e in fileName il nome che avrà il file allegato alla mail (dovrebbe essere lo stesso, ma volendo si può cambiare).

Share this story:
  • tweet

Tags: emailMessageUI.frameworkObjective-cprogrammazionesdkTutorial PraticiXcode

Recent Posts

  • Sviluppare applicazioni per Windows Phone 8

    14 maggio 2013 - 0 Comment
  • Reeder si aggiorna e supporta Feedbin

    28 aprile 2013 - 0 Comment
  • Parse acquisita da Facebook

    26 aprile 2013 - 6 Comments

Related Posts

  • Plugins per Xcode utili agli sviluppatori iOS e OSX

    1 marzo 2013 - 6 Comments
  • Andrea Picchi: Programmare con Objective-C 2.0 per iOS e OS X

    27 febbraio 2013 - 8 Comments
  • Come testare app su iPad 3 con SnowLeopard e Xcode 4.2

    31 agosto 2012 - 3 Comments

Author Description

15 Responses to “T#012 – Inviamo e-mail dalle nostre Applicazioni”

  1. 30 novembre 2009

    Luigi

    Una domanda….se volessi aggiungere alla mail un allegato che è contenuto nel bundle della mia applicazione? Grazieeeee

  2. 2 dicembre 2009

    Staff devAPP

    Ho aggiunto la soluzione alla tua richiesta nel tutorial (alla fine della pagina)

    Se hai altre domande usa il forum così le richieste hanno maggior visibilità e anche altri programmatori possono dare una mano ;)

    Alla prossima ^^

  3. 16 gennaio 2010

    Byteros

    Ottima guida.

  4. 2 febbraio 2010

    rOKI

    Ma se volessi accedere alla rubrica per gli indirizzi?

  5. 2 febbraio 2010

    Staff devAPP

    Ottima domanda :) Faremo prestissimo un tutorial sull’accesso alla rubrica ;)

  6. 17 febbraio 2010

    Davide

    Se si vuole provare l’applicazione sul simulatore senza configurare MAIL (nel caso non lo si abbia configurato) basta commentare il metodo inviaMail come segue:

    -(IBAction)inviaMail{
    MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
    mail.mailComposeDelegate = self;
    //#1 if([MFMailComposeViewController canSendMail]){
    [mail setToRecipients:[NSArray arrayWithObjects:@"info@devapp.it", nil]];
    [mail setSubject:@"Oggetto della mail"];
    [mail setMessageBody:@"Corpo del messaggio della nostra e-mail" isHTML:NO];
    [self presentModalViewController:mail animated:YES];
    //#2 }

    [mail release];
    }

  7. 9 giugno 2010

    Giovambattista Fazioli

    Nelle ultime righe di codice c’è un “errore”: il mime-type corretto è “image/jpeg” e non “image/png”. Li serve il mime-type del file attachment non dell’originale che è, effettivamente, PNG.
    Per una lista completa si veda:
    http://www.iana.org/assignments/media-types/

  8. 26 agosto 2010

    Thomas

    ciao.
    premetto di essere un novizio per quello che è il mondo apple in termini di sviluppo ecc…
    ho seguito passo per passo quanto spiegato.
    nel momento in cui devo collegare il metodo inviaMail al button, questo non mi compare tra gli outlets.
    Ho settato male qualcosa?
    Complimenti per i tutorial.
    Grazie

  9. 18 ottobre 2010

    me

    salve volevo sapere come è possibile sempre che lo sia.. cambiare layout al form email, lo vorrei in italiano.. quindi al posto di send, invia.. e cosi via…

  10. 2 marzo 2011

    Valerio

    Sito incredibile complimenti..ma non esiste nulla di simile cheinvece di trattare le mail tratti gli sms?

  11. 9 marzo 2011

    Dario

    Ciao a tutti,
    ottimo tutorial.
    L’unica cosa che non capisco è che quando la eseguo sul dispositivo visualizzo le descrizioni in inglese.
    C’è qualcosa di sbagliato nel mio progetto?
    O è possible impostare la lingua per l’oggetto?
    grazie mille
    ciao

  12. 25 gennaio 2012

    luigi

    come fare se volessi settare il mittente della mail?

  13. 21 maggio 2012

    Alberto

    Ciao a tutti. Il tutorial è perfetto.
    Ho solo una domanda: ho creato un’app con una tab bar con i vari pulsanti e in uno di questi ho fatto in modo che cliccandoci sopra venisse richiamato il file .xib “inappemailViewController.xib”.
    Quando vado a testarla mi fa vedere il pulsante “Clicca qui per inviare l’email” però se ci clicco sopra mi da errore sigbart: ” int retVal = UIApplicationMain(argc, argv, nil, nil); sigbart”

    Devo per caso modificare qualcosa nel IBAction del file inAppEmailViewController.m?

    Fatemi sapere.
    Grazie!

  14. 27 settembre 2012

    Moses


    Dario:

    Ciao a tutti,
    ottimo tutorial.
    L’unica cosa che non capisco è che quando la eseguo sul dispositivo visualizzo le descrizioni in inglese.
    C’è qualcosa di sbagliato nel mio progetto?
    O è possible impostare la lingua per l’oggetto?
    grazie mille
    ciao

    Anche io…dove sbaglio? Delete Draft invece di elimina bozza!

  15. 7 ottobre 2012

    iLucas

    ragazzi mi da errore… potete aiutarmi? -> http://d.pr/i/NLSe

Leave a Reply Cancel Reply

Your email address will not be published. Required fields are marked *

*
*


CREIAMO UN’APPLICAZIONE COMPLETA

Costruiamo insieme il nostro Client per Flickr
Logo Flickr Ecco come creare un semplice cient per Flickr, il noto Social Network per la gestione e la condivisione di foto, che ci permetterà di scaricare e visulizzare sui nostri iPhone le foto marcate come "interessanti". Questo elenco viene aggiornato quotidianamente, quindi ogni giorno l'applicazione fornirà foto diverse!

Creare un client Flickr - PARTE 1
Creare un client Flickr - PARTE 2
Creare un client Flickr - PARTE 3
Creare un client Flickr - PARTE 4

Scarica il progetto completo (FREE)

Download (836 KB)

TIENITI AGGIORNATO

Non perderti le nostre ultime pubblicazioni: iscriviti al nostro feed e ricevi gli articoli direttamente nella tua casella di posta.

RSSSubscribe
  • Forum
  • Programmazione Android
  • Corsi in aula
©2009-2013 devAPP - All Rights Reserved | P.IVA 10478190019