4

我有以下代码试图在后台发送电子邮件。我已经使用 textview 来查看异常。但是,虽然 textview 中没有显示任何内容,但我也无法收到邮件。所以我不确定邮件是否已成功发送。任何人都可以帮助我吗?

根据建议,我修改了我的程序如下:

新发件人.java

public class Sender extends Activity {
    Button Send;
    TextView text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sender);

        Send = (Button) findViewById(R.id.mail);
        text = (TextView) findViewById(R.id.textView1);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
        .permitAll().build();
        StrictMode.setThreadPolicy(policy); 

        Send.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new SendMail().execute();
            }
        });

    }

    private class SendMail extends AsyncTask<String, Void, String> 
    { 
        ProgressDialog pd = null;
        String error = null;
        Integer result;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pd = new ProgressDialog(Sender.this);
            pd.setTitle("Uploading");
            pd.setMessage("Uploading logs. Please wait");
            pd.setCancelable(false);
            pd.show();
        }

        @Override 
        protected String doInBackground(String... params) { 
            // TODO Auto-generated method stub 

            MailSender sender = new MailSender("me@gmail.com", "password"); 

            String[] toAddress = {"me@gmail.com"};
            sender.setTo(toAddress);
            sender.setFrom("me@gmail.com");
            sender.setSubject("Test mail");
            sender.setBody("This is the mail body");
            try {
                if(sender.send()) {
                    System.out.println("Message sent");
                    result = 1;
                } else {
                    result = 2;
                }
            } catch (Exception e) {   
                error = e.getMessage();
                Log.e("SendMail", e.getMessage(), e);    
            }

            result = 3; 
            return null;
        } 

        protected void onPostExecute() {
            pd.dismiss();
            if(error!=null) {
                text.setText(error);
            }
            if(result==1) {
                Toast.makeText(Sender.this,
                    "Email was sent successfully.", Toast.LENGTH_LONG)
                    .show();
            } else if(result==2) {
                Toast.makeText(Sender.this,
                        "Email was not sent.", Toast.LENGTH_LONG).show();
            } else if(result==3) {
                Toast.makeText(Sender.this,
                        "There was a problem sending the email.",
                        Toast.LENGTH_LONG).show();
            }
        }
    }   
}

新的 MailSender.java

public class MailSender extends Authenticator {
    private String user;
    private String password;

    private String [] to;
    private String from;

    private String port;
    private String sport;

    private String host;

    private String subject;
    private String body;

    private boolean auth;
    private boolean debuggable;

    private Multipart multi;

    public MailSender(){
        host = "smtp.gmail.com";
        port = "465";
        sport = "465";

        user = "";
        password = "";
        from = "";
        subject = "";
        body = "";

        debuggable = false;
        auth = true;

        multi = new MimeMultipart();

        // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
        MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
        CommandMap.setDefaultCommandMap(mc); 
    }

    public MailSender(String user, String password){
        this();      
        user = user;
        password = password;   
    }

    public boolean send() throws Exception {
        Properties props = setProperties();

        try{
            Session session = Session.getInstance(props, this);
            session.setDebug(true);

            MimeMessage msg = new MimeMessage(session);

            msg.setFrom(new InternetAddress(from));

            InternetAddress[] addressTo = new InternetAddress[to.length];
            for(int i=0; i<to.length; i++){
                addressTo[i] = new InternetAddress(to[i]);
            }

            msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
            msg.setSubject(subject);
            msg.setSentDate(new Date());

            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(body);
            multi.addBodyPart(messageBodyPart);

            msg.setContent(multi);

            Transport transport = session.getTransport("smtps");
            transport.connect(host, 465, user, password);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public void addAttachment(String filename) throws Exception {
        BodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(filename);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(filename);

        multi.addBodyPart(messageBodyPart);
    }

    @Override 
      public PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(user, password); 
      }

    private Properties setProperties() {
        Properties props = new Properties();

        props.put("mail.smtp.host", host);

        if(debuggable) {
            props.put("mail.debug", "true");
        }

        if(auth) {
            props.put("mail.smtp.auth", "true");
        }

        props.put("mail.smtp.port", port);
        props.put("mail.smtp.socketFactory.port", sport);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        return props;
    }

    public void setTo(String[] toAddress) {
        this.to = toAddress;
    }

    public void setFrom(String fromAddress) {
        this.from = fromAddress;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public void setBody(String body) { 
        this.body = body; 
    }
}

更改程序后,当我单击按钮时,它会停止在执行前状态,显示“正在上传日志。请稍候”。邮件无法发出。

在错误日志中:

08-14 16:26:29.872: I/System.out(22439): DEBUG: setDebug: JavaMail version 1.4.1
08-14 16:26:29.888: I/System.out(22439): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc.,1.4.1]
08-14 16:26:29.896: I/System.out(22439): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:26:29.896: I/System.out(22439): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:26:30.568: I/System.out(22439): 220 mx.google.com ESMTP nq6sm593334pbc.56
08-14 16:26:30.568: I/System.out(22439): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:26:30.568: I/System.out(22439): EHLO localhost
08-14 16:26:30.716: I/System.out(22439): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:26:30.716: I/System.out(22439): 250-SIZE 35882577
08-14 16:26:30.716: I/System.out(22439): 250-8BITMIME
08-14 16:26:30.716: I/System.out(22439): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:26:30.716: I/System.out(22439): 250 ENHANCEDSTATUSCODES
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:26:30.716: I/System.out(22439): DEBUG SMTP: Attempt to authenticate
08-14 16:26:30.724: I/System.out(22439): AUTH LOGIN
08-14 16:26:30.872: I/System.out(22439): 334 VXNlcm5hbWU6
08-14 16:26:30.872: I/System.out(22439): 
08-14 16:26:31.021: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:26:31.021: I/System.out(22439): 
08-14 16:26:31.169: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:26:31.177: I/System.out(22439): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:26:31.177: I/System.out(22439): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:26:31.552: D/dalvikvm(22439): GC_CONCURRENT freed 341K, 4% free 11097K/11527K, paused 13ms+3ms, total 37ms
08-14 16:26:31.794: I/System.out(22439): 220 mx.google.com ESMTP st6sm593199pbc.58
08-14 16:26:31.794: I/System.out(22439): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:26:31.794: I/System.out(22439): EHLO localhost
08-14 16:26:31.943: I/System.out(22439): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:26:31.943: I/System.out(22439): 250-SIZE 35882577
08-14 16:26:31.943: I/System.out(22439): 250-8BITMIME
08-14 16:26:31.943: I/System.out(22439): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:26:31.943: I/System.out(22439): 250 ENHANCEDSTATUSCODES
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:26:31.950: I/System.out(22439): DEBUG SMTP: Attempt to authenticate
08-14 16:26:31.950: I/System.out(22439): AUTH LOGIN
08-14 16:26:32.099: I/System.out(22439): 334 VXNlcm5hbWU6
08-14 16:26:32.099: I/System.out(22439): 
08-14 16:26:32.247: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:26:32.247: I/System.out(22439): 
08-14 16:26:32.403: I/System.out(22439): 334 UGFzc3dvcmQ6
08-14 16:27:00.200: I/Choreographer(22439): Skipped 35 frames!  The application may be doing too much work on its main thread.

由于它不起作用,所以我尝试隐藏 onpreexecute 功能,但没有任何变化,无法发送邮件,以下是错误日志中的消息:

08-14 16:31:18.958: I/System.out(22759): DEBUG: setDebug: JavaMail version 1.4.1
08-14 16:31:18.974: I/System.out(22759): DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc.,1.4.1]
08-14 16:31:18.974: I/System.out(22759): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:31:18.974: I/System.out(22759): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:31:19.739: I/System.out(22759): 220 mx.google.com ESMTP og7sm597805pbb.62
08-14 16:31:19.739: I/System.out(22759): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:31:19.739: I/System.out(22759): EHLO localhost
08-14 16:31:19.888: I/System.out(22759): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:31:19.888: I/System.out(22759): 250-SIZE 35882577
08-14 16:31:19.888: I/System.out(22759): 250-8BITMIME
08-14 16:31:19.888: I/System.out(22759): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:31:19.888: I/System.out(22759): 250 ENHANCEDSTATUSCODES
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:31:19.888: I/System.out(22759): DEBUG SMTP: Attempt to authenticate
08-14 16:31:19.896: I/System.out(22759): AUTH LOGIN
08-14 16:31:20.044: I/System.out(22759): 334 VXNlcm5hbWU6
08-14 16:31:20.044: I/System.out(22759): 
08-14 16:31:20.185: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:20.185: I/System.out(22759): 
08-14 16:31:20.341: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:20.341: I/System.out(22759): DEBUG SMTP: useEhlo true, useAuth false
08-14 16:31:20.341: I/System.out(22759): DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
08-14 16:31:20.786: I/System.out(22759): 220 mx.google.com ESMTP og7sm597845pbb.62
08-14 16:31:20.786: I/System.out(22759): DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
08-14 16:31:20.786: I/System.out(22759): EHLO localhost
08-14 16:31:20.935: I/System.out(22759): 250-mx.google.com at your service, [202.155.209.250]
08-14 16:31:20.935: I/System.out(22759): 250-SIZE 35882577
08-14 16:31:20.935: I/System.out(22759): 250-8BITMIME
08-14 16:31:20.935: I/System.out(22759): 250-AUTH LOGIN PLAIN XOAUTH
08-14 16:31:20.935: I/System.out(22759): 250 ENHANCEDSTATUSCODES
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "SIZE", arg "35882577"
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "8BITMIME", arg ""
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH"
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
08-14 16:31:20.943: I/System.out(22759): DEBUG SMTP: Attempt to authenticate
08-14 16:31:20.943: I/System.out(22759): AUTH LOGIN
08-14 16:31:21.091: I/System.out(22759): 334 VXNlcm5hbWU6
08-14 16:31:21.091: I/System.out(22759): 
08-14 16:31:21.239: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:21.239: I/System.out(22759): 
08-14 16:31:21.380: I/System.out(22759): 334 UGFzc3dvcmQ6
08-14 16:31:49.357: W/IInputConnectionWrapper(22759): clearMetaKeyStates on inactive InputConnection

我已经在AsyncTask中进行了发送操作,请问为什么还是不行?

4

6 回答 6

6

如日志所示,您正在从主 UI 线程调用网络相关任务。您必须使用AsyncTask这些通信。StrictMode并通过做删除

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
    .permitAll().build();

StrictMode.setThreadPolicy(policy);

另请参阅我在这篇文章中关于JavaMail API 使用的回答。

编辑:在此处添加了代码内联包 com.max.mactest;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Sender extends Activity {
    Button Send;
    TextView text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_login);

        Send = (Button) findViewById(R.id.cmdDoLogin);
        text = (TextView) findViewById(R.id.textView2);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
        .permitAll().build();
        StrictMode.setThreadPolicy(policy); 

        Send.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new SendMail().execute();
            }
        });

    }

    private class SendMail extends AsyncTask<String, Void, Integer> 
    { 
        ProgressDialog pd = null;
        String error = null;
        Integer result;

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pd = new ProgressDialog(Sender.this);
            pd.setTitle("Sending Mail");
            pd.setMessage("Please wait...");
            pd.setCancelable(false);
            pd.show();
        }

        @Override 
        protected Integer doInBackground(String... params) { 
            // TODO Auto-generated method stub 

            MailSender sender = new MailSender("yourmail@gmail.com", "yourpassword"); 

            sender.setTo(new String[]{"tomail@gmail.com"});
            sender.setFrom("yourmail@gmail.com");
            sender.setSubject("Test mail");
            sender.setBody("This is the mail body");
            try {
                if(sender.send()) {
                    System.out.println("Message sent");
                    return 1;
                } else {
                    return 2;
                }
            } catch (Exception e) {   
                error = e.getMessage();
                Log.e("SendMail", e.getMessage(), e);    
            }

            return 3; 
        } 

        protected void onPostExecute(Integer result) {
            pd.dismiss();
            if(error!=null) {
                text.setText(error);
            }
            if(result==1) {
                Toast.makeText(Sender.this,
                    "Email was sent successfully.", Toast.LENGTH_LONG)
                    .show();
            } else if(result==2) {
                Toast.makeText(Sender.this,
                        "Email was not sent.", Toast.LENGTH_LONG).show();
            } else if(result==3) {
                Toast.makeText(Sender.this,
                        "There was a problem sending the email.",
                        Toast.LENGTH_LONG).show();
            }
        }
    }   
}

更新MailSender

import java.util.Date;
import java.util.Properties;

import javax.activation.CommandMap;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.activation.MailcapCommandMap;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class MailSender extends Authenticator {
    private String user;
    private String password;

    private String [] to;
    private String from;

    private String port;
    private String sport;

    private String host;

    private String subject;
    private String body;

    private boolean auth;
    private boolean debuggable;

    private Multipart multi;

    public MailSender(){
        host = "smtp.gmail.com";
        port = "465";
        sport = "465";

        user = "";
        password = "";
        from = "";
        subject = "";
        body = "";

        debuggable = false;
        auth = true;

        multi = new MimeMultipart();

        // There is something wrong with MailCap, javamail can not find a handler for the multipart/mixed part, so this bit needs to be added.
        MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
        CommandMap.setDefaultCommandMap(mc); 
    }

    public MailSender(String user, String password){
        this();      
        this.user = user;
        this.password = password;   
    }

    public boolean send() throws Exception {
        Properties props = setProperties();

        try{
            Session session = Session.getInstance(props, this);
            session.setDebug(true);

            MimeMessage msg = new MimeMessage(session);

            msg.setFrom(new InternetAddress(from));

            InternetAddress[] addressTo = new InternetAddress[to.length];
            for(int i=0; i<to.length; i++){
                addressTo[i] = new InternetAddress(to[i]);
            }

            msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);
            msg.setSubject(subject);
            msg.setSentDate(new Date());

            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText(body);
            multi.addBodyPart(messageBodyPart);

            msg.setContent(multi);

            Transport transport = session.getTransport("smtps");
            transport.connect(host, 465, user, password);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    public void addAttachment(String filename) throws Exception {
        BodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(filename);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(filename);

        multi.addBodyPart(messageBodyPart);
    }

    @Override 
      public PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(user, password); 
      }

    private Properties setProperties() {
        Properties props = new Properties();

        props.put("mail.smtp.host", host);

        if(debuggable) {
            props.put("mail.debug", "true");
        }

        if(auth) {
            props.put("mail.smtp.auth", "true");
        }

        props.put("mail.smtp.port", port);
        props.put("mail.smtp.socketFactory.port", sport);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        return props;
    }

    public void setTo(String[] toAddress) {
        this.to = toAddress;
    }

    public void setFrom(String fromAddress) {
        this.from = fromAddress;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public void setBody(String body) { 
        this.body = body; 
    }
}
于 2012-08-14T05:59:43.590 回答
2

将以下链接中的 3 个 jars 添加到您的 Android 项目(右键单击项目-添加外部 jars)

单击此处 - 如何添加外部 JAR

运行项目并检查邮件的收件人邮件帐户。干杯!!

希望这可以帮助..

于 2012-08-14T04:15:24.643 回答
2

一旦检查我的工作Email Application。我把它放在这里

在此之前请确认您已添加

<uses-permission android:name="android.permission.INTERNET"/>在清单中

于 2012-08-14T04:50:45.060 回答
2

我猜你正在使用 API 级别 9+

您需要阅读有关StrictMode.

在您的情况下,您试图阻止主 UI 线程上的网络 API,这就是发生错误的原因。

作为一种解决方案,您可以在您的onCreate()

if (android.os.Build.VERSION.SDK_INT > 9) {
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
      StrictMode.setThreadPolicy(policy);
    }

阅读:此博客API 指南

另请阅读AsyncTask并使用它来执行您在主线程上执行的任务。

于 2012-08-14T05:47:01.320 回答
0

对于 NetworkOnMainThreadException,您需要使用 AsyncTask 来执行网络活动。为此,您可以尝试查看以下代码。我还没有检查它,也许你需要对代码进行一些调整。

首先为 AsyncTask 创建一个类,例如:

private class SendMail extends AsyncTask<String, Void, String>
{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        try {    
            MailSender sender = new MailSender("me@gmail.com", "password"); 
            sender.sendMail("Testing",    
                    "This is a test mail",    
                    "me@gmail.com",    
                    "me@gmail.com");    
        } catch (Exception e) {    
            text.setText(e.getMessage());
            Log.e("SendMail", e.getMessage(), e);    
        }

        return null;
    }

}

new SendMail().execute()现在您可以通过在您的onCreate方法中 调用来简单地完成您的网络活动任务。

于 2012-08-14T07:00:20.243 回答
0

如果您使用异步任务发送电子邮件,请遵循此

private class DownloadImageTask extends AsyncTask<String, String, Void> {
    int flag=0;
    protected Void doInBackground(String... arg0) {
        try{
            m = new Mail(emailaddress, password);
            m.setFrom(emailaddress.trim());
            toArr =   email.split(",");
            for(int i=0;i<toArr.length;i++)
            {
                                    // checking all emails entered are correct or not
                if (toArr[i].trim().matches(EMAIL_PATTERN))
                {
                    emailflag = true;
                }
                else
                {
                    emailflag = false;
                    break;
                }
            }
            m.setTo(toArr);
            if(!Subject.equals(""))
            {
                m.setSubject(txtSubject.getText().toString());
            }
            else   
            {
                m.setSubject("No Subject");
            }
            if(!EmailBody.equals(""))
            {
                m.setBody(txtEmailBody.getText().toString());
            }
            else  
            {
                m.setBody("No Message");                    
            }
            if(!attachefile.equals(""))
            {
                String[] temp;
                temp = attachefile.split("\\*");
                if(temp.length>0)
                {
                    for(int i =0; i < temp.length ; i++)
                    {   
                        m.addAttachment(temp[i]);
                    }
                }
            }
            if(emailflag && m.send())
            {
                flag=1;
                Intent intent = new Intent(SendEmail.this,SendEmail.class);
                startActivity(intent);
            }
            else
            {
                flag = 0;
            }

        }catch(Exception e){

                e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(Void result) 
    {
        progressDialog.dismiss();
        if(flag==1)
        {
            Toast.makeText(SendEmail.this, "Sent Successfully", Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(SendEmail.this, "Failed please give correct email address", Toast.LENGTH_SHORT).show();
        }
    }
}

这是电子邮件的正则表达式..

private static final String EMAIL_PATTERN = 
        "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
于 2012-08-14T08:50:02.010 回答