2011-08-17 11 views
10

Szukałem od jakiegoś czasu pewnej platformy, która pozwoli mi wysłać wiadomość e-mail z poziomu mojej aplikacji. Próbowałem MailCore, Pantomimy i SKPSMTP bez powodzenia. Nie mogę zmusić ich do kompilacji w Xcode, więc założyłem, że są przestarzałe. Czy mogę to zrobić? Jeśli tak to jak? Dzięki.Xcode 4/iOS - Wyślij wiadomość e-mail za pomocą protokołu SMTP z poziomu mojej aplikacji

+0

Istnieje sposób, aby wyskoczyć z aplikacji do nowej skrzynki e-mail w aplikacji, ale użytkownik decyduje, czy ją wysłać. Nie jestem pewien, czy zaimplementowanie własnego SMTP w aplikacji będzie zatwierdzone przez Apple. – Dani

+0

Może nie, ale jest wiele aplikacji, które implementują to, czego nie ma? Kontekst, w którym się znajduje, to formularz rezerwacji hotelu. Więc jeśli dodaję przycisk wysyłania, a jabłko widzę, że nie robię nic nieprzyjemnego, nie widzę powodu, dla którego byłoby odrzucone. Chyba że przegapiłem coś w wytycznych. Dziękuję za wejście. –

+0

Z powodzeniem skompilowałem kod SKPSMTP. Spróbuj dodać pliki .m jawnie do Faz budujących/źródeł kompilacji. – Ellis

Odpowiedz

18

Możesz łatwo wysyłać wiadomości e-mail z urządzenia z systemem iOS. Nie ma potrzeby wdrażania SMTP i wszystkich. Najlepszą rzeczą w korzystaniu z wbudowanych funkcji wysyłania wiadomości e-mail w systemie iOS jest dostęp do książki adresowej! Tak więc automatycznie uzupełnia nazwy, adresy e-mail. Yaaii !!

Dołącz, AddressBook, AddressBookUI i MessageUI frameworków i kodu tego typu. Pamiętaj, że możesz nawet wysyłać treści jako HTML!

#import <MessageUI/MessageUI.h> 
#import <AddressBook/AddressBook.h> 
#import <AddressBookUI/AddressBookUI.h> 

MFMailComposeViewController *mailComposer; 
mailComposer = [[MFMailComposeViewController alloc] init]; 
mailComposer.mailComposeDelegate = self; 
[mailComposer setModalPresentationStyle:UIModalPresentationFormSheet]; 
[mailComposer setSubject:@"your custom subject"]; 
[mailComposer setMessageBody:@"your custom body content" isHTML:NO]; 
[self presentModalViewController:mailComposer animated:YES]; 
[mailComposer release]; 

Dla kompletności, mam do napisania tego selektora, aby zamknąć okno e-mail, jeśli użytkownik naciśnie cancel lub send -

- (void)mailComposeController:(MFMailComposeViewController*)controller 
      didFinishWithResult:(MFMailComposeResult)result 
         error:(NSError*)error 
{ 
    if(error) NSLog(@"ERROR - mailComposeController: %@", [error localizedDescription]); 
    [self dismissModalViewControllerAnimated:YES]; 
    return; 
} 

Szczęśliwa kodowanie ...

+0

Dziękuję za twoją szczegółową i nieco humorystyczną odpowiedź! :) Czy to podniesie ekran wiadomości od dołu, czy wyśle ​​go po cichu w tle? Ponieważ staram się o to drugie. –

1

bym Wyobraź sobie, że sposobem zatwierdzonym przez Apple jest wysłanie danych na serwer za pośrednictwem Postu HTTP, a serwer powinien wygenerować dla ciebie pocztę. Widziałem, jak inni zadawali podobne pytania, a odpowiedź brzmi, że jeśli wysyłasz je z urządzenia, naprawdę musisz zapytać użytkownika.

Mogę ci nawet powiedzieć, dlaczego tak jest: Wyobraź sobie aplikację, która może wysłać się do wszystkich w twojej książce adresowej bez twojego potwierdzenia, mówiąc im, że właśnie zainstalowałeś aplikację X, i oni też powinni. Nawet jeśli ma się dobre intencje, może to szybko doprowadzić do potężnej burzy SMTP, a w istocie będzie to wirus "I love you".

To było wystarczające obciążenie publicznego Internetu, ale na bezprzewodowych nośnikach, może szybko spowodować wystarczająco dużo przeciążenia, aby zablokować usługę cel.

Wniosek: Użyj ComposeViewController, jak sugeruje @Srikar, lub POST danych na serwerze i wyślij go stamtąd.

+0

Rozumiem to, ale gdybym nie używał jabłka zbudowanego w ramach, nie potrzebowałbym dostępu do książki adresowej. Tylko jeden z e-maili i jeden na e-mail. Ale jeśli nie jest to możliwe, muszę po prostu poprosić użytkownika o wypełnienie formularza, a wiadomość e-mail zostanie wygenerowana dla nich po prostu naciśnij. –

4

SKPSMTPMessage nadal działa dobrze do wysyłania wiadomości e-mail bez potrzeby interfejsu użytkownika .

Pamiętaj, aby dodać odniesienie do CFNetwork.framework w swoim projekcie. W przeciwnym razie otrzymasz błędy kompilacji.

+3

Użyłem tego 'SKPSMTPMessage'. Ale musi zakodować nazwę użytkownika i hasło. Ale chcę wysłać wiadomość e-mail przy użyciu już zalogowanego konta e-mail w telefonie iPhone. Jak mogę to zrobić – iDia

6

Należy zauważyć, że MFMailComposeViewController ma metodę o nazwie canSendMail. Jeśli nie zaznaczysz tego przed wyświetleniem MFMailComposeViewController na urządzeniu, które nie ma konta e-mail, otrzymasz SIGABRT.

Łatwo przegapić to podczas testowania na urządzeniu lub symulatorze, ponieważ prawdopodobnie będziesz mieć konto e-mail na Macu i iPadzie.

Powiązane problemy