Я пытаюсь отправить электронную почту, не используя клиент электронной почты. Поэтому я попробовал код, приведенный в некоторых уроках. Но всегда, когда я пытаюсь отправить мой eMail, отправка не выполняется с NullPointerException
по методу transport.connect()
.API JavaMail, получающий NullpointerException
Мой код
package com.example.app;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Properties;
import javax.mail.AuthenticationFailedException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import android.util.Log;
public class GMail {
final String emailPort = "587";// gmail's smtp port
final String smtpAuth = "true";
final String starttls = "true";
final String emailHost = "smtp.gmail.com";
// final String fromUser = "****";
// final String fromUserEmailPassword = "****";
String fromEmail;
String fromPassword;
List<String> toEmailList;
String emailSubject;
String emailBody;
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;
public GMail() {
}
public GMail(String fromEmail, String fromPassword,
List<String> toEmailList, String emailSubject, String emailBody) {
this.fromEmail = fromEmail;
this.fromPassword = fromPassword;
this.toEmailList = toEmailList;
this.emailSubject = emailSubject;
this.emailBody = emailBody;
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", emailPort);
emailProperties.put("mail.smtp.auth", smtpAuth);
emailProperties.put("mail.smtp.starttls.enable", starttls);
Log.i("GMail", "Mail server properties set.");
}
public MimeMessage createEmailMessage() throws AddressException,
MessagingException, UnsupportedEncodingException {
mailSession = Session.getInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
emailMessage.setFrom(new InternetAddress(fromEmail, fromEmail));
for (String toEmail : toEmailList) {
Log.i("GMail","toEmail: "+toEmail);
emailMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(toEmail));
}
emailMessage.setSubject(emailSubject);
emailMessage.setContent(emailBody, "text/html");// for a html email
// emailMessage.setText(emailBody);// for a text email
Log.i("GMail", "Email Message created.");
return emailMessage;
}
public void sendEmail() throws AddressException, MessagingException, AuthenticationFailedException {
try{
Transport transport = mailSession.getTransport("smtp");
Log.i("GMail", "Transport created");
transport.connect(emailHost, fromEmail, fromPassword);
Log.i("GMail","allrecipients: "+emailMessage.getAllRecipients());
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
Log.i("GMail", "Email sent successfully.");
}
catch(Exception e){
Log.i("GMail", "Exception " + e.getMessage());
}
}
}
Использование AsyncTask
для отправки почты:
package com.example.app;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
public class SendMailTask extends AsyncTask {
private ProgressDialog statusDialog;
private Activity sendMailActivity;
public SendMailTask(Activity activity) {
sendMailActivity = activity;
}
protected void onPreExecute() {
statusDialog = new ProgressDialog(sendMailActivity);
statusDialog.setMessage("Getting ready...");
statusDialog.setIndeterminate(false);
statusDialog.setCancelable(false);
statusDialog.show();
}
@Override
protected Object doInBackground(Object... args) {
try {
Log.i("SendMailTask", "About to instantiate GMail...");
publishProgress("Processing input....");
GMail androidEmail = new GMail(args[0].toString(),
args[1].toString(), (List) args[2], args[3].toString(),
args[4].toString());
publishProgress("Preparing mail message....");
androidEmail.createEmailMessage();
publishProgress("Sending email....");
androidEmail.sendEmail();
publishProgress("Email Sent.");
Log.i("SendMailTask", "Mail Sent.");
} catch (Exception e) {
publishProgress(e.getMessage());
Log.e("SendMailTask", e.getMessage(), e);
}
return null;
}
@Override
public void onProgressUpdate(Object... values) {
statusDialog.setMessage(values[0].toString());
}
@Override
public void onPostExecute(Object result) {
statusDialog.dismiss();
}
}
и в этой деятельности я называю sendMail()
:
package com.example.app;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.RadioGroup;
public class Attendance extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.attendance);
}
public void clickButSubmit(View view){
String to="****@freenet.de";
String from="****";
String pwd="****";
String subject="test";
String message="bla blub";
List<String> toEmailList=Arrays.asList(to.split("\\s*,\\s*"));
Log.i("Attendance", "toEmailList" + toEmailList);
new SendMailTask(Attendance.this).execute(from,pwd,toEmailList,subject,message);
}
public void clickButClear(View view){
RadioGroup rg = (RadioGroup) findViewById(R.id.button_group_attendance);
rg.clearCheck();
rg=(RadioGroup) findViewById(R.id.button_group_stint);
rg.clearCheck();
rg=(RadioGroup) findViewById(R.id.button_group_weekend);
rg.clearCheck();
}
}
Он не работает с именем * * ни * @ googlemail.com.
Должно возникнуть проблема с аутентификацией, поскольку метод transport.connect()
выдает исключение.
вот Log:
08-28 09:42:59.456: I/GMail(4304): Email Message created.
08-28 09:42:59.846: I/GMail(4304): Transport created
08-28 09:43:02.846: I/GMail(4304): Exception null
08-28 09:43:02.846: I/SendMailTask(4304): Mail Sent.
Игнорируйте «Почта Отправленные» войти, потому что я только поймать исключение без каких-либо вмешательств.
редактировать: e.printStackTrace() в обработчике исключений дает:
08-28 10:06:04.317: I/GMail(5439): Exception null
08-28 10:06:04.317: W/System.err(5439): javax.mail.AuthenticationFailedException
08-28 10:06:04.317: W/System.err(5439): at javax.mail.Service.connect(Service.java:319)
08-28 10:06:04.317: W/System.err(5439): at com.example.app.GMail.sendEmail(GMail.java:82)
08-28 10:06:04.367: W/System.err(5439): at com.example.app.SendMailTask.doInBackground(SendMailTask.java:40)
08-28 10:06:04.427: W/System.err(5439): at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-28 10:06:04.437: W/System.err(5439): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-28 10:06:04.447: W/System.err(5439): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-28 10:06:04.447: W/System.err(5439): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-28 10:06:04.447: W/System.err(5439): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-28 10:06:04.497: W/System.err(5439): at java.lang.Thread.run(Thread.java:841)
из-за этого, я предлагаю проблему в transport.connect()-method
редактировать 2: с mailSession.setDebug (правда) :
08-28 11:19:34.664: I/GMail(9492): Email Message created.
08-28 11:19:34.674: I/System.out(9492): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc.,1.4.1]
08-28 11:19:34.684: I/GMail(9492): Transport created
08-28 11:19:34.684: I/GMail(9492): host smtp.gmail.com
08-28 11:19:34.684: I/GMail(9492): user name xxxx
08-28 11:19:34.734: I/GMail(9492): pwd xxxx
08-28 11:19:34.744: I/System.out(9492): DEBUG SMTP: useEhlo true, useAuth true
08-28 11:19:34.744: I/System.out(9492): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
08-28 11:19:35.824: I/System.out(9492): 220 mx.google.com ESMTP wr10sm10759961wjc.10 - gsmtp
08-28 11:19:35.894: I/System.out(9492): DEBUG SMTP: connected to host "smtp.gmail.com", port: 587
08-28 11:19:35.964: I/System.out(9492): EHLO localhost
08-28 11:19:36.014: I/System.out(9492): 250-mx.google.com at your service, [158.181.68.197]
08-28 11:19:36.024: I/System.out(9492): 250-SIZE 35882577
08-28 11:19:36.034: I/System.out(9492): 250-8BITMIME
08-28 11:19:36.034: I/System.out(9492): 250-STARTTLS
08-28 11:19:36.034: I/System.out(9492): 250-ENHANCEDSTATUSCODES
08-28 11:19:36.034: I/System.out(9492): 250-PIPELINING
08-28 11:19:36.034: I/System.out(9492): 250-CHUNKING
08-28 11:19:36.084: I/System.out(9492): 250 SMTPUTF8
08-28 11:19:36.094: I/System.out(9492): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-28 11:19:36.094: I/System.out(9492): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-28 11:19:36.104: I/System.out(9492): DEBUG SMTP: Found extension "STARTTLS", arg ""
08-28 11:19:36.154: I/System.out(9492): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-28 11:19:36.164: I/System.out(9492): DEBUG SMTP: Found extension "PIPELINING", arg ""
08-28 11:19:36.164: I/System.out(9492): DEBUG SMTP: Found extension "CHUNKING", arg ""
08-28 11:19:36.164: I/System.out(9492): DEBUG SMTP: Found extension "SMTPUTF8", arg ""
08-28 11:19:36.214: I/System.out(9492): STARTTLS
08-28 11:19:36.284: I/System.out(9492): 220 2.0.0 Ready to start TLS
08-28 11:19:38.214: I/System.out(9492): EHLO localhost
08-28 11:19:38.264: I/System.out(9492): 250-mx.google.com at your service, [158.181.68.197]
08-28 11:19:38.274: I/System.out(9492): 250-SIZE 35882577
08-28 11:19:38.274: I/System.out(9492): 250-8BITMIME
08-28 11:19:38.274: I/System.out(9492): 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
08-28 11:19:38.274: I/System.out(9492): 250-ENHANCEDSTATUSCODES
08-28 11:19:38.274: I/System.out(9492): 250-PIPELINING
08-28 11:19:38.274: I/System.out(9492): 250-CHUNKING
08-28 11:19:38.334: I/System.out(9492): 250 SMTPUTF8
08-28 11:19:38.344: I/System.out(9492): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-28 11:19:38.344: I/System.out(9492): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-28 11:19:38.394: I/System.out(9492): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
08-28 11:19:38.424: I/System.out(9492): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Found extension "PIPELINING", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Found extension "CHUNKING", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Found extension "SMTPUTF8", arg ""
08-28 11:19:38.444: I/System.out(9492): DEBUG SMTP: Attempt to authenticate
08-28 11:19:38.504: I/System.out(9492): AUTH LOGIN
08-28 11:19:38.614: I/System.out(9492): 334 VXNlcm5hbWU6
08-28 11:19:38.614: I/System.out(9492): ZWIxNG1zQGdvb2dsZW1haWwuY29t
08-28 11:19:38.674: I/System.out(9492): 334 UGFzc3dvcmQ6
08-28 11:19:38.704: I/System.out(9492): RkZ3UzIwMDM=
08-28 11:19:39.044: I/System.out(9492): 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsSi
08-28 11:19:39.084: I/System.out(9492): 534-5.7.14 WAPBKxXrfqaVMKdB7zRhISihBZWTJlb98chHX5cnpuqhm_KUO2czQYBBRTt4KObt7ntZSJ
08-28 11:19:39.084: I/System.out(9492): 534-5.7.14 QIqeHh6gs0Q2XQDVlZGCxCrGEsYoz5-1Qv7Tc98LT7lP6dO8gCnAbkydaRLbsmTfI8Xl-s
08-28 11:19:39.084: I/System.out(9492): 534-5.7.14 zG47TvmrvdIMiSF0R91lNdduhygKxOW-VCJcH8KADwJJkJeWxOQXK-uBA-YF2ZUnEMLWvV
08-28 11:19:39.134: I/System.out(9492): 534-5.7.14 LQKdhEA> Please log in via your web browser and then try again.
08-28 11:19:39.144: I/System.out(9492): 534-5.7.14 Learn more at
08-28 11:19:39.164: I/System.out(9492): 534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 wr10sm10759961wjc.10 - gsmtp
08-28 11:19:39.314: I/GMail(9492): Exception null
Используйте 'e.printStackTrace();' – Simas
или это может быть проблемой, потому что я запускаю этот код в эмуляторе? используется INTERNET. –
Возможно, попробуйте распечатать 'fromEmail',' fromPassword' перед подключением, проверьте, правильны ли они. – Simas