Ich versuche, eine E-Mail-Sendeanwendung in Android zu erstellen.
Wenn ich benutze:
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
Dadurch wird die integrierte Android-Anwendung gestartet. Ich versuche, die E-Mail auf Knopfdruck direkt zu senden, ohne diese Anwendung zu verwenden.
Antworten:
Senden Sie E-Mails in Android mithilfe der JavaMail-API mithilfe der Google Mail-Authentifizierung.
Schritte zum Erstellen eines Beispielprojekts:
MailSenderActivity.java:
GMailSender.java:
JSSEProvider.java:
Fügen Sie 3 Gläser hinzu, die Sie unter dem folgenden Link zu Ihrem Android-Projekt finden
Klicken Sie hier - So fügen Sie externe Gläser hinzu
Und vergessen Sie nicht, diese Zeile in Ihr Manifest aufzunehmen:
Klicken Sie einfach auf den folgenden Link, um den Kontozugriff für weniger sichere Apps zu ändern. Https://www.google.com/settings/security/lesssecureapps
Führen Sie das Projekt aus und überprüfen Sie Ihr Empfänger-E-Mail-Konto auf die E-Mail. Prost!
PS Und vergessen Sie nicht, dass Sie keinen Netzwerkbetrieb von einer Aktivität in Android aus ausführen können. Daher wird empfohlen, die Ausnahme "Netzwerk im Hauptthread" zu verwenden
AsyncTask
oderIntentService
zu vermeiden.Jar-Dateien: https://code.google.com/archive/p/javamail-android/
quelle
Vielen Dank für Ihre wertvollen Informationen. Code funktioniert gut. Ich kann Anhänge auch hinzufügen, indem ich folgenden Code hinzufüge.
quelle
filename
Variable hier müssen Sie den Dateipfad angeben. Zum Beispiel:String path = Environment.getExternalStorageDirectory().getPath() + "/temp_share.jpg";
Fügen Sie diese Zeile in Ihr Manifest ein:
quelle
Sie können die JavaMail-API verwenden, um Ihre E-Mail-Aufgaben zu erledigen. Die JavaMail-API ist im JavaEE-Paket verfügbar und die JAR-Datei steht zum Download zur Verfügung. Leider kann es nicht direkt in einer Android-Anwendung verwendet werden, da AWT-Komponenten verwendet werden, die in Android vollständig inkompatibel sind.
Sie finden den Android-Port für JavaMail unter folgendem Speicherort: http://code.google.com/p/javamail-android/
Fügen Sie die Gläser Ihrer Anwendung hinzu und verwenden Sie die SMTP-Methode
quelle
eu.ocathain.com.sun.mail:javax.mail:1.5.2
Um denjenigen zu helfen, die eine Network On Main Thread-Ausnahme mit einem SDK-Ziel> 9 erhalten. Dies verwendet den obigen Droopie-Code, funktioniert jedoch für alle ähnlich.
Sie können AsyncTask wie folgt verwenden
quelle
100% Arbeitscode mit Demo Mit dieser Antwort können Sie auch mehrere E-Mails senden.
Laden Sie das Projekt HIER herunter
Schritt 1: Laden Sie E-Mails, Aktivierungen und zusätzliche JAR-Dateien herunter und fügen Sie sie in Ihrem Projektbibliotheksordner in Android Studio hinzu. Ich habe einen Screenshot hinzugefügt, siehe unten Download-Link
Einloggen mit gmail ( mit Ihrem von Mail ) und TURN ON Umschaltknopf LINK
Die meisten Leute vergessen diesen Schritt, ich hoffe du wirst es nicht.
Schritt 2: Nach Abschluss dieses Vorgangs. Kopieren Sie diese Klassen und fügen Sie sie in Ihr Projekt ein.
GMail.java
SendMailTask.java
Schritt 3: Jetzt können Sie diese Klasse nach Ihren Wünschen ändern und mit dieser Klasse mehrere E-Mails senden. Ich biete sowohl XML als auch Java-Datei.
activity_mail.xml
SendMailActivity.java
Hinweis Vergessen Sie nicht, Ihrer AndroidManifest.xml-Datei eine Internetberechtigung hinzuzufügen
<uses-permission android:name="android.permission.INTERNET"/>
Hoffe es funktioniert wenn es dann nicht einfach unten kommentiert.
quelle
SMTP
Die Verwendung von SMTP ist ein Weg, und die anderen haben bereits Wege aufgezeigt, wie dies zu tun ist. Beachten Sie nur, dass Sie dabei die integrierte Mail-App vollständig umgehen und die Adresse des SMTP-Servers, den Benutzernamen und das Kennwort für diesen Server entweder statisch in Ihrem Code angeben oder vom Benutzer abfragen müssen .
HTTP
Eine andere Möglichkeit wäre ein einfaches serverseitiges Skript wie PHP, das einige URL-Parameter verwendet und zum Senden einer E-Mail verwendet. Auf diese Weise müssen Sie nur eine HTTP-Anfrage vom Gerät stellen (mit den integrierten Bibliotheken problemlos möglich) und müssen die SMTP-Anmeldedaten nicht auf dem Gerät speichern. Dies ist eine weitere Indirektion im Vergleich zur direkten SMTP-Nutzung. Da es jedoch so einfach ist, HTTP-Anfragen zu stellen und E-Mails von PHP aus zu senden, ist dies möglicherweise sogar einfacher als der direkte Weg.
Mail-Anwendung
Wenn die E-Mail von dem Standard-E-Mail-Konto des Benutzers gesendet werden soll, das er bereits beim Telefon registriert hat, müssen Sie einen anderen Ansatz wählen. Wenn Sie genug Zeit und Erfahrung haben, sollten Sie den Quellcode der Android-E-Mail-Anwendung überprüfen, um festzustellen, ob sie einen Einstiegspunkt zum Senden einer E-Mail ohne Benutzerinteraktion bietet (ich weiß nicht, aber möglicherweise gibt es einen).
Vielleicht finden Sie sogar eine Möglichkeit, die Kontodetails des Benutzers abzufragen (damit Sie sie für SMTP verwenden können), obwohl ich stark bezweifle, dass dies möglich ist, da dies ein großes Sicherheitsrisiko darstellt und Android ziemlich sicher erstellt wird.
quelle
Hier ist eine Alternativversion, die auch für mich funktioniert und Anhänge enthält (bereits oben gepostet, aber vollständige Version im Gegensatz zum Quelllink, den die Leute gepostet haben, sie können es nicht zum Laufen bringen, da die Daten fehlen).
und es in einer Aktivität zu nennen ...
quelle
Could not send email android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
es zu lösen , ist es notwendig, diese Lösung zu sehen stackoverflow.com/questions/25093546/…Verwendungszweck:
Aufbau:
Berechtigungen:
Auch für Anhänge müssen Sie die Berechtigung READ_EXTERNAL_STORAGE festlegen:
Quelle
(Ich habe es selbst getestet)
quelle
Warnung bei Verwendung von "smtp.gmail.com" als Standard-SMTP-Server.
Google wird Sie zwingen, das Passwort Ihres verknüpften E-Mail-Kontos aufgrund der eifrigen Richtlinien für "verdächtige Aktivitäten" häufig zu ändern. Im Wesentlichen werden wiederholte SMTP-Anfragen aus verschiedenen Ländern innerhalb kurzer Zeit als "verdächtige Aktivität" behandelt. Wie sie annehmen, können Sie (der E-Mail-Kontoinhaber) jeweils nur in einem Land sein.
Wenn Google-Systeme "verdächtige Aktivitäten" erkennen, werden weitere E-Mails verhindert, bis Sie das Kennwort ändern. Da Sie das Passwort fest in die App codiert haben, müssen Sie die App jedes Mal neu veröffentlichen, was nicht ideal ist. Dies passierte mir dreimal in der Woche. Ich habe das Passwort sogar auf einem anderen Server gespeichert und es jedes Mal dynamisch abgerufen, wenn Google mich gezwungen hat, es zu ändern.
Ich empfehle daher, anstelle von "smtp.gmail.com" einen der vielen kostenlosen SMTP-Anbieter zu verwenden, um dieses Sicherheitsproblem zu vermeiden. Verwenden Sie denselben Code, ändern Sie jedoch "smtp.gmail.com" in Ihren neuen SMTP-Weiterleitungshost.
quelle
suspicioud activity
Problem gelöst?Bearbeiten: JavaMail 1.5.5 behauptet, Android zu unterstützen , sodass Sie nichts anderes benötigen sollten.
Ich habe die neueste JavaMail (1.5.4) auf Android portiert. Es ist in Maven Central verfügbar. Fügen Sie einfach Folgendes zubuild.gradle
~~ hinzuSie können dann dem offiziellen Tutorial folgen .
Der Quellcode ist hier verfügbar: https://bitbucket.org/artbristol/javamail-forked-android
quelle
Ich habe eine kürzere Alternative für andere gefunden, die Hilfe brauchen. Der Code lautet:
Quelle: Senden von E-Mails über die JavaMail-API
Hoffe das hilft! Viel Glück!
quelle
Diejenigen, die
ClassDefNotFoundError
versuchen, diese drei JAR-Dateien in den lib-Ordner Ihres Projekts zu verschieben, haben bei mir funktioniert !!quelle
Zum Versenden einer Mail mit Anhang ..
quelle
Ich kann den Code von Vinayak B nicht ausführen. Schließlich löste ich dieses Problem wie folgt:
1.Verwenden Sie dies
2.Anwenden von AsyncTask.
In 3.Changing Sicherheitsproblem des Absenders Google Mail - Konto. (Wechsel zu „TURN ON“) diese
quelle
Haben Sie überlegt, Apache Commons Net zu verwenden? Seit 3.3 nur ein Glas (und Sie können sich mit Gradle oder Maven darauf verlassen) und fertig: http://blog.dahanne.net/2013/06/17/sending-a-mail-in-java- und-android-with-apache-commons-net /
quelle
Ohne Benutzereingriff können Sie Folgendes senden:
Senden Sie eine E-Mail von Client apk. Hier ist mail.jar, activity.jar erforderlich, um Java-E-Mails zu senden. Wenn diese Gläser hinzugefügt werden, kann dies die APK-Größe erhöhen.
Alternativ können Sie einen Webservice am serverseitigen Code verwenden, der zum Senden von E-Mails dieselbe mail.jar- und aktivierungs.jar-Datei verwendet. Sie können den Webdienst über asynctask anrufen und eine E-Mail senden. Siehe gleichen Link.
(Sie müssen jedoch die Anmeldeinformationen des E-Mail-Kontos kennen.)
quelle
Falls Sie aufgefordert werden, die JAR-Bibliothek so klein wie möglich zu halten, können Sie die SMTP / POP3 / IMAP-Funktion separat einschließen, um das Problem "zu viele Methoden im Dex" zu vermeiden.
Sie können die gewünschten JAR-Bibliotheken auf der Javanet-Webseite auswählen. Mit mailapi.jar + imap.jar können Sie beispielsweise im IMAP-Protokoll auf den icloud-Hotmail-Mailserver zugreifen. (mit Hilfe von Additional.jar und Activation.Jar)
quelle
Ich habe versucht, den von @Vinayak B übermittelten Code zu verwenden. Ich erhalte jedoch die Fehlermeldung: Kein Anbieter für SMTP
Ich habe hierfür eine neue Frage mit weiteren Informationen HIER erstellt
Ich konnte es doch selbst reparieren. Ich musste eine andere mail.jar verwenden und sicherstellen, dass mein " Zugriff für weniger sichere Apps " aktiviert war.
Ich hoffe, das hilft jedem, der das gleiche Problem hat. Wenn dies erledigt ist, funktioniert dieser Code auch auf dem Google-Glas.
quelle
Der gesamte Code in den anderen Antworten ist korrekt und funktioniert einwandfrei, ist jedoch etwas chaotisch . Daher habe ich beschlossen, eine Bibliothek zu veröffentlichen (die sich jedoch noch in der Entwicklung befindet), um sie einfacher zu verwenden: AndroidMail .
Sie müssen nur einen MailSender erstellen, eine Mail erstellen und senden (bereits im Hintergrund mit einer AsyncTask behandelt).
Sie können eine Benachrichtigung für die gesendete E-Mail erhalten und sie unterstützt auch verschiedene Empfängertypen (TO, CC und BCC), Anhänge und HTML:
Sie können es über Gradle oder Maven bekommen:
Bitte lassen Sie mich wissen, wenn Sie ein Problem damit haben! :) :)
quelle
Hier sind viele Lösungen. Ich denke jedoch, wir müssen die Konfiguration der GMail ändern, um den Zugriff von weniger sicheren Geräten aus zu ermöglichen. Gehen Sie zu dem unten stehenden Link und aktivieren Sie ihn. Für mich geht das
https://myaccount.google.com/lesssecureapps?pli=1
quelle
quelle
Programmgesteuertes Senden von E-Mails mit Kotlin.
Ich fand diese Liste der E-Mail-POP-Dienste auch sehr hilfreich:
https://support.office.com/en-gb/article/pop-and-imap-email-settings-for-outlook-8361e398-8af4-4e97-b147-6c6c4ac95353
Wie benutzt man:
Der Code:
Gradle:
AndroidManifest:
quelle
Vergessen Sie nicht, einen Anhang hinzuzufügen.
quelle