2014-08-28 2 views
0

Я пытаюсь отправить электронную почту, не используя клиент электронной почты. Поэтому я попробовал код, приведенный в некоторых уроках. Но всегда, когда я пытаюсь отправить мой 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 
+0

Используйте 'e.printStackTrace();' – Simas

+0

или это может быть проблемой, потому что я запускаю этот код в эмуляторе? используется INTERNET. –

+0

Возможно, попробуйте распечатать 'fromEmail',' fromPassword' перед подключением, проверьте, правильны ли они. – Simas

ответ

0

Похоже, что Gmail может выбрать, чтобы предотвратить доступ из скрипта, вы можете включить, что через:

Gmail's Recent Activity. Он должен быть под необычной деятельностью.

Edit:

Ну вы используете TLS (port 587, isSSL false).

Попробуйте подключить через SSL, то:

Properties emailProperties = new Properties(); 
emailProperties.put("mail.smtp.host", "smtp.gmail.com"); 
emailProperties.put("mail.smtp.auth", "true"); 
emailProperties.put("mail.smtp.port", "465"); 
emailProperties.put("mail.smtp.socketFactory.port", "465"); 
emailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

Надеется, что решает проблему.

+0

вы играете. когда я включаю «небезопасные соединения» в свой gooogle-accout, он работает. Но что мне делать, что мне это не нужно? Это проблема с SSL-шифрованием? На самом деле я не использую какой-то менеджер проверки подлинности ... –

+0

@paul_schaefer Я обновил свой ответ, попробуйте. – Simas

+0

спасибо за ваш ответ, но он не работает. То же исключение ... –

Смежные вопросы