• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • 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 e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#012 – Inviamo e-mail dalle nostre Applicazioni

By Redazione | on 26 Novembre 2009 | 15 Comments
Senza categoria

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

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Microservizi per logiche applicative di grandi dimensioni

    27 Luglio 2016 - 0 Comment
  • Con Xcode 6.3 arriva il Crash Log Organizer

    26 Febbraio 2015 - 0 Comment
  • Xcode-project-generator: uno script per creare velocemente progetti Xcode

    21 Ottobre 2014 - 1 Comment

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

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


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO