{"id":999,"date":"2009-11-26T23:14:31","date_gmt":"2009-11-26T22:14:31","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=999"},"modified":"2010-09-08T18:41:00","modified_gmt":"2010-09-08T16:41:00","slug":"t012-inviamo-e-mail-dalle-nostre-applicazioni","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t012-inviamo-e-mail-dalle-nostre-applicazioni\/","title":{"rendered":"T#012 &#8211; Inviamo e-mail dalle nostre Applicazioni"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS02.jpg\" alt=\"t012_IS02\" title=\"t012_IS02\" width=\"80\" height=\"120\" class=\"alignleft size-full wp-image-1003\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS02.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS02-200x300.jpg 200w\" sizes=\"auto, (max-width: 80px) 100vw, 80px\" \/> Nel tutorial &#8220;<a href=\"http:\/\/www.devapp.it\/wordpress\/t004-inviare-una-e-mail.html\" target=\"blank\">T#004 &#8211; Inviare una e-mail<\/a>&#8221; 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 \u00e8 un po&#8217; scomodo, in quanto porta alla chiusura del nostro programma in esecuzione per poter aprire Mail ed inviare cos\u00ec il messaggio di posta. Sta di fatto che questa \u00e8 comunque l&#8217;unica soluzione per chi ha ancora un iPhone con firmware precedente alla versione 3.0. E&#8217; infatti da questa versione del firmware che \u00e8 stata aggiunta la possibilit\u00e0 di implementare l&#8217;invio diretto delle e-mail dalle nostre Applicazioni. Grazie al framework<!--more--> &#8220;MessageUI.framework&#8221; e poche righe di codice potremo quindi inviare e-mail direttamente dalle nostre applicazioni senza uscire dal programma.<\/p>\n<p>Partiamo quindi con il nostro tutorial:<\/p>\n<ul>\n<li>Apriamo Xcode e creiamo un nuovo progetto<\/li>\n<li>Dall&#8217;elenco dei template disponibili scegliamo &#8220;View-based Application&#8221; e proseguiamo<\/li>\n<li>Date un nome all&#8217;applicazione, ad esempio &#8220;inAppMail&#8221;<\/li>\n<li>Scegliete dove salvare il programma e proseguite<\/li>\n<\/ul>\n<p>Prima di iniziare a scrivere codice dovremo inserire il framework &#8220;MessageUI.framework&#8221;. Per farlo seguite questi semplici passi:<\/p>\n<ul>\n<li>Cliccate con il pulsante destro del mouse su &#8220;Frameworks&#8221; in &#8220;Groups &#038; Files&#8221;<\/li>\n<li>Cliccate su &#8220;Add&#8221;, quindi su &#8220;Existing Frameworks&#8230;&#8221;<\/li>\n<li>Dalla nuova finestra cercate e selezionate &#8220;MessageUI.framework&#8221; e cliccate infine su &#8220;Add&#8221;<\/li>\n<\/ul>\n<p>Apriamo ora il file &#8220;inAppMailViewController.h&#8221; e inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n#import <MessageUI\/MessageUI.h>\r\n\r\n@interface inAppMailViewController : UIViewController <MFMailComposeViewControllerDelegate, UINavigationControllerDelegate> {\r\n\r\n}\r\n\r\n-(IBAction)inviaMail;\r\n\r\n@end\r\n<\/pre>\n<p>Non abbiamo fatto altro che importare &#8220;MessageUI\/MessageUI.h&#8221; per poter utilizzare ci\u00f2 che ci offre il nuovo framework, abbiamo aggiunto i protocolli &#8220;MFMailComposeViewControllerDelegate&#8221; e &#8220;UINavigationControllerDelegate&#8221; e abbiamo dichiarato infine un metodo di tipo IBAction, che collegheremo ad un oggetto UIButton creato pi\u00f9 avanti con Interface Builder, di nome &#8220;inviaMail&#8221;.<\/p>\n<p>Apriamo ora il file &#8220;inAppMailViewController.m&#8221; e inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n-(IBAction)inviaMail{\r\n\tMFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];\r\n\tmail.mailComposeDelegate = self;\r\n\t\r\n\tif([MFMailComposeViewController canSendMail]){\r\n\t\t[mail setToRecipients:[NSArray arrayWithObjects:@\"info@devapp.it\", nil]];\r\n\t\t[mail setSubject:@\"Oggetto della mail\"];\r\n\t\t[mail setMessageBody:@\"Corpo del messaggio della nostra e-mail\" isHTML:NO];\r\n\t\t[self presentModalViewController:mail animated:YES];\r\n\t}\r\n\t\r\n\t[mail release];\r\n}\r\n\r\n- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{\r\n\r\n\t[self dismissModalViewControllerAnimated:YES];\r\n\t\r\n\tif (result == MFMailComposeResultFailed){\r\n\t\tUIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Messaggio non inviato!\" message:@\"Non \u00e8 stato possibile inviare la tua e-mail\" delegate:self cancelButtonTitle:@\"Annulla\" otherButtonTitles:nil];\r\n\t\t<div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n\t\t<div class=\"alert\"><button type=\"button\" class=\"close\">&#215;<\/button><div class=\"clear\"><\/div><\/div>;\r\n\t}\r\n}\r\n<\/pre>\n<p>Con il primo metodo, &#8220;inviaMail&#8221;, creiamo un oggetto di tipo &#8220;MFMailComposeViewController&#8221; di nome &#8220;mail&#8221;, settiamo il suo delegato a self e verifichiamo se la mail pu\u00f2 essere inviata. In caso affermativo settiamo destinatari, oggetto e corpo del messaggio via codice (anche se potremmo tranquillamente creare un&#8217;interfaccia grafica e lasciare all&#8217;utente il compito di compilare questi campi) e apriamo tramite una semplice animazione la ModalViewController che conterr\u00e0 il nostro messaggio pronto per l&#8217;invio. <\/p>\n<p>Il secondo metodo serve semplicemente a farci tornare alla nostra applicazione una volta inviato il messaggio e in caso di errore durante l&#8217;invio, a restituirci un messaggio di alert che ci indica quanto appena accaduto. Per quanto riguarda il codice \u00e8 tutto. <\/p>\n<p>Apriamo ora Interface Builder facendo doppio click sul file &#8220;inAppMailViewController.xib&#8221;. Trasciniamo quindi nella view un oggetto UIButton, modifichiamo la sua propriet\u00e0 &#8220;Title&#8221; in &#8220;INVIA E-MAIL&#8221; e clicchiamo su &#8220;File&#8217;s Owner&#8221;. Colleghiamo quindi il metodo &#8220;inviaMail&#8221; con il pulsante appena creato facendo attenzione a scegliere &#8220;Touch up inside&#8221; dall&#8217;elenco che ci appare rilasciando il mouse sull&#8217;UIButton. Il risultato, &#8220;abbellimenti estetici&#8221; a parte, \u00e8 una semplice vista con un pulsante al suo interno:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IB.jpg\" alt=\"t012_IB\" title=\"t012_IB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-1001\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IB.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IB-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p>Salviamo e chiudiamo Interface Builder. Da Xcode clicchiamo su &#8220;Build and Run&#8221; e testiamo la nostra applicazione. L&#8217;invio vero e proprio della mail sar\u00e0 possibile solo se l&#8217;applicazione viene testata da un dispositivo, tramite iPhone Simulator dovremo accontentarci di vedere la mail pronta per l&#8217;invio al click del pulsante. Di seguito due immagine dell&#8217;applicazione durante l&#8217;esecuzione:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS01.jpg\" alt=\"t012_IS01\" title=\"t012_IS01\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-1002\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS01.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS01-200x300.jpg 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS02.jpg\" alt=\"t012_IS02\" title=\"t012_IS02\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-1003\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS02.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t012_IS02-200x300.jpg 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p>Se voleste inserire un allegato, ad esempio un&#8217;immagine contenuta nel vostro progetto, dovrete inserire prima dell&#8217;istruzione [self presentModalViewController:mail animated:YES]; il seguente codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nUIImage *img = [UIImage imageNamed:@\"background.png\"];\r\nNSData *myData = UIImageJPEGRepresentation(img ,1.0);\r\n[mail addAttachmentData:myData mimeType:@\"image\/png\" fileName:@\"image.jpeg\"];\r\n<\/pre>\n<p>Dove in <em>imageNamed<\/em> dovete mettere il nome della vostra immagine, nel nostro esempio <em>background.png<\/em> e in <em>fileName<\/em> il nome che avr\u00e0 il file allegato alla mail (dovrebbe essere lo stesso, ma volendo si pu\u00f2 cambiare).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel tutorial &#8220;T#004 &#8211; Inviare una e-mail&#8221; avevamo visto come inviare una mail da iPhone, passando destinatari,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[34,384,5,4,14,1,23],"class_list":["post-999","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-email","tag-messageui-framework","tag-objective-c","tag-programmazione","tag-sdk","tag-tutorial-pratici","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=999"}],"version-history":[{"count":11,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/999\/revisions"}],"predecessor-version":[{"id":4347,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/999\/revisions\/4347"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}