Próbuję utworzyć aplikację do wysyłania poczty w systemie Android.
Jeśli użyję:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
Spowoduje to uruchomienie wbudowanej aplikacji na Androida; Próbuję wysłać pocztę bezpośrednio po kliknięciu przycisku bez korzystania z tej aplikacji.
Odpowiedzi:
Wysyłaj wiadomości e-mail w systemie Android za pomocą interfejsu API JavaMail za pomocą uwierzytelniania Gmaila.
Kroki, aby utworzyć przykładowy projekt:
MailSenderActivity.java:
GMailSender.java:
JSSEProvider.java:
DODAJ 3 słoiki znalezione w poniższym linku do Twojego projektu Android
Kliknij tutaj - jak dodać słoiki zewnętrzne
I nie zapomnij dodać tej linii do manifestu:
Wystarczy kliknąć poniższy link, aby zmienić dostęp do konta dla mniej bezpiecznych aplikacji https://www.google.com/settings/security/lesssecureapps
Uruchom projekt i sprawdź, czy na koncie pocztowym odbiorcy nie ma wiadomości. Twoje zdrowie!
PS I nie zapominaj, że nie możesz wykonywać operacji sieciowych z żadnej Aktywności w Androidzie. Dlatego zaleca się stosowanie
AsyncTask
lubIntentService
unikanie sieci na wyjątku głównym wątku.Pliki jar: https://code.google.com/archive/p/javamail-android/
źródło
Dziękujemy za cenne informacje. Kod działa dobrze. Jestem w stanie dodać załącznik, dodając następujący kod.
źródło
filename
zmiennej tutaj musisz podać ścieżkę do pliku. Na przykład:String path = Environment.getExternalStorageDirectory().getPath() + "/temp_share.jpg";
Dodaj tę linię do manifestu:
źródło
Możesz użyć JavaMail API do obsługi zadań e-mail. Interfejs API JavaMail jest dostępny w pakiecie JavaEE, a jego jar można pobrać. Niestety nie można go używać bezpośrednio w aplikacji na Androida, ponieważ wykorzystuje on komponenty AWT, które są całkowicie niezgodne z Androidem.
Port Android dla JavaMail można znaleźć w następującej lokalizacji: http://code.google.com/p/javamail-android/
Dodaj słoiki do aplikacji i użyj metody SMTP
źródło
eu.ocathain.com.sun.mail:javax.mail:1.5.2
Aby pomóc tym, którzy uzyskali wyjątek dotyczący sieci na głównym wątku z celem SDK> 9. Używa powyższego kodu droopie, ale będzie działać podobnie dla każdego.
Możesz użyć AsyncTask jak poniżej
źródło
W 100% działający kod z wersją demonstracyjną Możesz również wysłać wiele e-maili, korzystając z tej odpowiedzi.
Pobierz projekt TUTAJ
Krok 1: Pobierz pocztę, aktywację, dodatkowe pliki jar i dodaj do folderu libs projektu w Android studio. Dodałem zrzut ekranu, patrz poniżej Link do pobrania
Zaloguj się za pomocą Gmaila ( używając poczty z ) i WŁĄCZ przycisk przełączania LINK
Większość ludzi zapomina o tym kroku, mam nadzieję, że tego nie zrobisz.
Krok 2: Po zakończeniu tego procesu. Skopiuj i wklej te klasy do swojego projektu.
GMail.java
SendMailTask.java
Krok 3: Teraz możesz zmienić tę klasę zgodnie ze swoimi potrzebami, a także możesz wysyłać wiele wiadomości za pomocą tej klasy. Udostępniam oba pliki XML i Java.
activity_mail.xml
SendMailActivity.java
Uwaga Nie zapomnij dodać uprawnienia do Internetu w pliku AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Mam nadzieję, że zadziała, jeśli nie, to po prostu skomentuj poniżej.
źródło
SMTP
Używanie SMTP jest jednym ze sposobów, a inni już wskazali sposoby, jak to zrobić. Pamiętaj, że robiąc to, całkowicie obchodzisz wbudowaną aplikację pocztową i musisz podać adres serwera SMTP, nazwę użytkownika i hasło do tego serwera, statycznie w kodzie lub zapytać go od użytkownika .
HTTP
Innym sposobem byłby prosty skrypt po stronie serwera, taki jak php, który pobiera niektóre parametry adresu URL i używa ich do wysyłania wiadomości e-mail. W ten sposób wystarczy wysłać żądanie HTTP z urządzenia (łatwo jest to możliwe dzięki wbudowanym bibliotekom) i nie trzeba przechowywać danych logowania SMTP na urządzeniu. Jest to jeszcze jedna pośrednia zależność w porównaniu do bezpośredniego użycia SMTP, ale ponieważ tak bardzo łatwo jest wysyłać żądania HTTP i wysyłać wiadomości e-mail z PHP, może być nawet prostsze niż bezpośredni sposób.
Aplikacja pocztowa
Jeśli wiadomość zostanie wysłana z domyślnego konta pocztowego użytkownika, które już zarejestrował w telefonie, będziesz musiał zastosować inne podejście. Jeśli masz wystarczająco dużo czasu i doświadczenia, możesz sprawdzić kod źródłowy aplikacji poczty e-mail na Androida, aby sprawdzić, czy oferuje ona punkt wejścia do wysyłania poczty bez interakcji użytkownika (nie wiem, ale może jest).
Może nawet znajdziesz sposób na sprawdzenie danych konta użytkowników (abyś mógł użyć ich do SMTP), choć bardzo wątpię, czy jest to możliwe, ponieważ byłoby to ogromne ryzyko bezpieczeństwa, a system Android jest zbudowany dość bezpiecznie.
źródło
tutaj jest wersja alt, która również działa dla mnie i ma załączniki (opublikowana już powyżej, ale pełna wersja w przeciwieństwie do linku źródłowego, który ludzie opublikowali, nie mogą uruchomić go, ponieważ brakuje danych)
i nazwać to działaniem ...
źródło
Could not send email android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
ten problem , należy zobaczyć to rozwiązanie stackoverflow.com/questions/25093546/…Stosowanie:
Konfiguracja:
Uprawnienia:
Również w przypadku załączników musisz ustawić uprawnienie READ_EXTERNAL_STORAGE:
Źródło
(Sam to przetestowałem)
źródło
Słowo ostrzeżenia, jeśli używasz „smtp.gmail.com” jako domyślnego serwera smtp.
Google będzie zmuszać Cię do częstej zmiany hasła do połączonego konta e-mail ze względu na ich gorliwe zasady dotyczące „podejrzanych działań”. Zasadniczo traktuje powtarzające się żądania smtp z różnych krajów w krótkim czasie jako „podejrzane działanie”. Jak zakładają, właściciel konta e-mail może znajdować się tylko w jednym kraju na raz.
Kiedy systemy Google wykryją „podejrzaną aktywność”, zapobiegnie dalszym wiadomościom e-mail, dopóki nie zmienisz hasła. Ponieważ hasło zostało zakodowane na stałe w aplikacji, musisz ją ponownie wypuścić za każdym razem, gdy tak się stanie, co nie jest idealne. Zdarzyło mi się to 3 razy w tygodniu, nawet zapisałem hasło na innym serwerze i dynamicznie pobierałem hasło za każdym razem, gdy Google zmusiło mnie do jego zmiany.
Dlatego zalecam użycie jednego z wielu bezpłatnych dostawców smtp zamiast „smtp.gmail.com”, aby uniknąć tego problemu z bezpieczeństwem. Użyj tego samego kodu, ale zmień „smtp.gmail.com” na nowego hosta przekierowującego smtp.
źródło
suspicioud activity
problem?Edycja: JavaMail 1.5.5 twierdzi, że obsługuje Androida , więc nie powinieneś niczego więcej potrzebować.
Przeniesiłem najnowszą wersję JavaMail (1.5.4) na Androida. Jest dostępny w Maven Central, po prostu dodaj następującebuild.gradle
rzeczy do ~~Następnie możesz wykonać oficjalny samouczek .
Kod źródłowy jest dostępny tutaj: https://bitbucket.org/artbristol/javamail-forked-android
źródło
Znalazłem krótszą alternatywę dla innych, którzy potrzebują pomocy. Kod to:
Źródło: Wysyłanie wiadomości e-mail za pośrednictwem interfejsu API JavaMail
Mam nadzieję że to pomoże! Powodzenia!
źródło
Ci, którzy
ClassDefNotFoundError
próbują przenieść te trzy pliki jar do folderu lib twojego projektu, zadziałało to dla mnie !!źródło
Do wysyłania wiadomości z załącznikiem ..
źródło
Nie jestem w stanie uruchomić kodu Vinayak B. Wreszcie rozwiązałem ten problem, wykonując następujące czynności:
1. za pomocą tego
2. Stosowanie AsyncTask.
3. Zmiana kwestii bezpieczeństwa konta Gmail nadawcy (Zmień na „WŁĄCZ”) w tym
źródło
Czy rozważałeś użycie Apache Commons Net? Od wersji 3.3 tylko jeden słoik (możesz na nim polegać za pomocą gradle lub maven) i gotowe: http://blog.dahanne.net/2013/06/17/sending-a-mail-in-java- i-android-with-apache-commons-net /
źródło
Bez interwencji użytkownika możesz wysłać w następujący sposób:
Wyślij e-mail z klienta apk. Tutaj mail.jar, Activ.jar jest wymagany do wysłania e-maila w Javie. Dodanie tych słoików może zwiększyć rozmiar APK.
Alternatywnie możesz użyć usługi sieci web po stronie serwera, która będzie używać tego samego mail.jar i aktywacji.jar do wysyłania wiadomości e-mail. Możesz zadzwonić do usługi internetowej za pomocą asynchronicznego zadania i wysłać wiadomość e-mail. Zobacz ten sam link.
(Ale musisz znać poświadczenia konta pocztowego)
źródło
Jeśli wymagane jest, aby biblioteka jar była możliwie jak najmniejsza, można osobno włączyć funkcję SMTP / POP3 / IMAP, aby uniknąć problemu „zbyt wielu metod w dex”.
Możesz wybrać pożądane biblioteki jar ze strony internetowej javanet , na przykład mailapi.jar + imap.jar może umożliwić ci dostęp do serwera poczty icloud, hotmail w protokole IMAP. (przy pomocy dodatkowych.jar i aktywacji.jar)
źródło
Próbowałem użyć kodu przesłanego przez @Vinayak B. Jednak pojawia się komunikat o błędzie: Brak dostawcy smtp
Stworzyłem nowe pytanie w tym celu, więcej informacji TUTAJ
W końcu udało mi się to naprawić. Musiałem użyć innego pliku mail.jar i upewnić się, że mój „ dostęp do mniej bezpiecznych aplikacji ” jest włączony.
Mam nadzieję, że to pomoże każdemu, kto ma ten sam problem. Po wykonaniu tej czynności ten fragment kodu działa również na Google Glass.
źródło
Cały kod podany w innych odpowiedziach jest poprawny i działa dobrze, ale jest nieco niechlujny, więc postanowiłem opublikować bibliotekę (wciąż w fazie rozwoju), aby użyć go w łatwiejszy sposób: AndroidMail .
Musisz tylko utworzyć MailSender, zbudować pocztę i wysłać ją (już obsługiwaną w tle za pomocą AsyncTask).
Możesz otrzymać powiadomienie o wysłanej wiadomości e-mail, a także obsługuje ona różne typy odbiorców (TO, CC i BCC), załączniki i HTML:
Możesz go zdobyć za pośrednictwem Gradle lub Maven:
Daj mi znać, jeśli masz z tym jakiś problem! :)
źródło
Oto wiele rozwiązań. Myślę jednak, że musimy zmienić konfigurację Gmaila, aby umożliwić dostęp z mniej bezpiecznych urządzeń. Przejdź do linku poniżej i włącz go. Mi to pasuje
https://myaccount.google.com/lesssecureapps?pli=1
źródło
źródło
Programowe wysyłanie wiadomości e-mail za pomocą Kotlin.
Uważam również, że ta lista usług POP e-mail jest naprawdę pomocna:
https://support.office.com/en-gb/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353
Jak używać:
Kod:
Stopień:
AndroidManifest:
źródło
Aby dodać załącznik, nie zapomnij dodać.
źródło