Senden von E-Mails ohne Benutzerinteraktion - Android Studio
Motivation: ich Schaffe eine Anmeldung Aktivität und muss ich senden Sie eine Automatische E-Mail unter dem Button Klicken. Ich habe die Anzahl der Blogs, stackoverflow Fragen und nicht in der Lage eine email zu senden, so-weit.
Arbeitsumfeld: Android Studio 1.2 Beta 3
Derzeit Frage :Senden von E-Mails in Android mit Hilfe von JavaMail-API ohne Verwendung der Standard - /built-in app
Nun, Hier ist, Was ich Getan habe :
Heruntergeladen, drei Jar-Dateien
- activation.jar
- additional.jar
- mail.jar
Dann kopierte ich die drei jar-Dateien in folgende Ordner:
G:\Android Projekte\E-Mail\app\libs\
Nach dem Kopieren der Dateien fand ich meine .jar-Dateien, indem Sie in "Projekt-Explorer" im Android Studio und dann ändern mein Baum-Ansicht von "Android" zu "Projekt"
Dann die Erweiterung der Baum-Projekt > app > libs >
Nachdem die Suche nach Dateien; auf jedem .jar-Datei habe ich: Rechte Maustaste -> Hinzufügen-Bibliothek
Einmal die graddle bauen fertig war, wurde mir dann kopiert den code von oben folgte Frage und führen in mein eigenes Projekt. Es kompiliert ohne Fehler.
Das Problem ist jetzt :
Wenn ich ein Programm ausführen, es zeigt eine toast-Nachricht "E-Mail wurde Erfolgreich Gesendet" aber ich habe nie eine Mail erhalten, Noch es gibt jede gesendete mails in meinem account.
Ist hier mein code für alle Klassen und .xml-Dateien
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button send = (Button)findViewById(R.id.send_email);
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//TODO Auto-generated method stub
try {
GMailSender sender = new GMailSender("[email protected]", "123abc-123abc");
sender.sendMail("ARS",
"This is Body HEELO WORLD",
"[email protected]",
"[email protected]");
Toast.makeText(MainActivity.this, "Email was sent successfully.", Toast.LENGTH_LONG).show();
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
Toast.makeText(MainActivity.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();
}
}
});
}
}
GMailSender.java
package com.example.hassnainmunir.email;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;
import java.util.Properties;
class GMailSender extends javax.mail.Authenticator {
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
static {
Security.addProvider(new JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
e.printStackTrace();
}
}
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;
public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}
public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}
public void setType(String type) {
this.type = type;
}
public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}
public String getName() {
return "ByteArrayDataSource";
}
public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}
}
JSSEProvider.java
package com.example.hassnainmunir.email;
import java.security.AccessController;
import java.security.Provider;
public final class JSSEProvider extends Provider {
public JSSEProvider() {
super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
public Void run() {
put("SSLContext.TLS",
"org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
put("Alg.Alias.SSLContext.TLSv1", "TLS");
put("KeyManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
put("TrustManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
return null;
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/send_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/Send_Email" />
</LinearLayout>
AndroidMenifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hassnainmunir.email" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Strings.xml
<resources>
<string name="app_name">Email</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="Send_Email">Send Email</string>
</resources>
bauen.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "22.0.0"
defaultConfig {
applicationId "com.example.hassnainmunir.email"
minSdkVersion 14
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
compile files('libs/activation.jar')
}
Können Sie mir bitte Helfen bei der Identifizierung, wo ich Falsch mache.
Weil Ihr seit drei Tagen bin ich stecken da. Und nicht eine email erhalten.
Ich habe eine Frage folgte link, der code ist identisch und funktioniert für viele Menschen, wie bereits erwähnt, dass es über. Das problem ist, kann mit dem hinzufügen der .jar-Dateien in android-studio. Wenn Sie denken, das problem ist dort. Können Sie bitte beheben Sie es. Aber im Falle, wenn das problem ist eine andere Sache. Bitte helfen Sie mir auch. Ich bin sterben, lösen dieses Problem 🙁
Ihre jar-Dateien sollten korrekt sein, denn sonst sollte es nicht kompiliert, wenn Sie fehlen. Veröffentlichen Sie Ihre app-Module zu bauen.gradle-Datei, wenn Sie wollen, dass überprüft obwohl.
Ich habe Hinzugefügt, build.gradle in meiner Frage, wie gut.. Freundlich zu überprüfen, ob meine .jar korrekt sind oder nicht
Ich habe auch versucht zu posten der screenshots, wie ich habe meine .jar-Dateien. Aber stackoverflow nicht erlaubt, um zu posten der Bilder unter 10 Punkte Ruf. 🙁
InformationsquelleAutor Hassnain | 2015-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
es ist nicht die Antwort auf deine Frage , aber ich denke, es könnte hilfreich sein,
check this out https://mandrillapp.com/api/docs/
ich benutze mandrill-api zum senden von E-Mail in meiner Anwendung
Sie zuerst ein Konto erstellen in mandrill Website, dann füllen Sie die Daten, die E-Mail sollte enthalten im json-format gefällt, was Sie sehen, in diesem link https://mandrillapp.com/api/docs/messages.html#method=send
und nach, dass excute HTTP-POST-requests, die enthalten Ihre json-uri : https://mandrillapp.com/api/1.0/messages/send.json
Umsetzung
überprüfen Sie auch diese Bibliothek , es könnte machen es einfacher zu implementieren .
Mandrill Unterstützung verwendet werden, die in Android Studio?
Android studio ist nur IDE , mandrill, bieten Sie eine API, können Sie senden Sie Ihre Anfrage, um es von android , php , python und alles, was du was 🙂
Editiere ich meine Antwort, um zu zeigen, wie Sie diese umsetzen , wenn es Ihnen hilft, bitte abstimmen und wenn es auch behebt problem kenn mich akzeptierten Antworten 🙂
O. k lass mich arbeiten .. Wenn es für mich funktioniert ... Aber bitte lassen Sie mich wissen.. Macht es erforderlich, alle importiert, oder nicht ? oder sollte ich mit dem code, wie es mit änderungen ?
InformationsquelleAutor Soroush
Ihre GMailSender.java code ist voll von diesen gemeinsame JavaMail-Fehler.
Stellen Sie sicher, dass Sie mit der die Letzte version von JavaMail.
Brauchen Sie nicht ByteArrayDataSource weil JavaMail enthält es.
Finden Sie heraus, was passiert, um Ihre Nachricht, es würde helfen, zu aktivieren JavaMail-debugging-Sitzung. Die debug-Ausgabe möglicherweise bieten einige Hinweise.
Aber wirklich, sollten Sie darüber nachdenken, ob das senden der E-Mail von Ihrem client-Anwendung ist der richtige Ansatz. Wenn Ihre client-Anwendung ist die Interaktion mit der web-site irgendeine Art von "signup " Aktivität", wäre es weit besser für die E-Mail gesendet werden, als ein Ergebnis der Aktivität auf dem server. Um dies zu tun auf dem client müssen Sie entweder fest verdrahten Sie das Kennwort für Ihr Gmail-Konto in den client, oder Sie brauchen, um Fragen der Nutzer der app für Ihre Google Mail-Konto und Passwort.
Ich haben den code aus dem Link in der Frage. Und ist die Arbeit für viele Menschen. Ich habe Angst vor der Tatsache, dass. Ich habe keine änderungen vorgenommen. Und immer noch nicht senden von E-Mails. 🙁
Sorry, ich werde nicht schreiben Sie Ihren code für Sie. Es gibt viel mehr Beispiel-code auf die JavaMail-web-site und der JavaMail-FAQ. Es ist schwer zu sagen, ob das problem in Ihrem code oder etwas anderes, ohne dass der JavaMail-debug aus.
Ich sage nicht, um code für mich.. ich habe den code der code oben. Meine einzige mission hier ist, um einen Fehler finden. Soweit debug ist um seine Identifizierung nicht alle Fehler.
InformationsquelleAutor Bill Shannon
Ich denke, Sie müssen zwei Dinge tun:
1. Fügen Sie Ihre gesamte Netzwerk-code im asynchronen Aufgabe, denn android unterstützt single-thread-Modell. Wenn Sie ALSO direkt für das senden von E-Mail auf den main-ui-thread, vielleicht frieren Sie Ihre app.
2. Sie können überprüfen Sie Ihre gmail-Einstellungen, wo man aktivieren kann Ihre Sicherheit. So, Sie können es aus dem app. Bitte Folgen Sie den links unten, wenn Sie daran interessiert sind, mit java-libs für das senden von E-Mail..
http://www.javatpoint.com/java-mail-api-tutorial
InformationsquelleAutor Ashutosh Srivastava