Android使用Javamail发送Email群发加附件

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android使用Javamail发送Email群发加附件脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

之前写了一篇关于AndROId中发送Email的文章,里面用到的是隐式的intent来激活系统自带的邮件发送功能。

今天花了一天来自己实现这个邮件发送功能。

这里用gmail作为发送方的邮箱,其他网易,新浪什么的应该也ok,QQ貌似不行。

下面是实现步骤及相关代码。

项目添加jar包

将activation.jar,addITionnal.jar,mail.jar放到项目的libs 文件夹。然后在项目中选中这三个包,右击->Build Path->Add to buildPath.

添加成功后项目就像这样.

Android使用Javamail发送Email群发加附件

项目中添加Mail类

 package com.example.mailtest; 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.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 Mail extends javax.mail.Authenticator {   private String _user;   private String _pass;     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 _multipart;       public Mail() {   _host = "smtp.gmail.com"; // default smtp server   _port = "465"; // default smtp port   _sport = "465"; // default socketfactory port     _user = ""; // username   _pass = ""; // password   _from = ""; // email sent from   _subject = ""; // email subject   _body = ""; // email body     _debuggable = false; // debug mode on or off - default off   _auth = true; // smtp authentication - default on     _multipart = 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/XMl;; x-java-content-handler=com.sun.mail.handlers.text_xml");   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 Mail(String user, String pass) {   this();     _user = user;   _pass = pass;   }   public void setTo(String[] toArr) {  this._to = toArr;  }    public void setFrom(String string) {  this._from = string;  }    public void setSubject(String string) {  this._subject = string;  }  public boolean send() throws Exception {   Properties props = _setProperties();     if(!_user.equals("") && !_pass.equals("") && _to.length > 0 && !_from.equals("") && !_subject.equals("") && !_body.equals("")) {   Session session = Session.getInstance(props, this);     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());     // SETUP message body   BodyPart messageBodyPart = new MimeBodyPart();   messageBodyPart.setText(_body);   _multipart.addBodyPart(messageBodyPart);   // Put parts in message   msg.setContent(_multipart);   // send email   Transport.send(msg);     return true;   } else {   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);     _multipart.addBodyPart(messageBodyPart);   }     @override   public PasswordAuthentication getPasswordAuthentication() {   return new PasswordAuthentication(_user, _pass);   }     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;   }     // the getters and setters   public String getBody() {   return _body;   }     public void setBody(String _body) {   this._body = _body;   }     // more of the getters and setters …..  } 

MailActivity调用

 package com.example.mailtest;     import java.util.Properties;   import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;         import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.app.ProgreSSDiaLOG; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.Toast;   public class MailActivity extends Activity {    private Button sendBTn;  private String username;  private String password;  private Handler sendHandler;  private ProgressDialog progressDialog;  @Override  protected void onCreate(Bundle savedInstancestate) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_mail);  sendBtn=(Button)findViewById(R.id.btnSend);  sendHandler = new Handler();  sendBtn.setOnClickListener(new View.OnClickListener() {   public void onClick(View v) {   SendTask sTask = new SendTask();   sTask.execute();  }   });     }     @Override  public boolean onCreateOptionsMenu(Menu menu) {  // Inflate the menu; this adds items to the action bar if it is present.  getMenuInflater().inflate(R.menu.activity_mail, menu);  return true;  }        class SendTask extends AsyncTask<Integer, Integer, String>{   //后面尖括号内分别是参数(例子里是线程休息时间),进度(publishProgress用到),返回值 类型     @Override   protected void onPreExecute() {   //第一个执行方法   Toast.makeText(getApplicationContext(), "Begin Send!", Toast.LENGTH_SHORT).show();   super.onPreExecute();   }     @Override   protected String doInBackground(Integer... params) {   //第二个执行方法,onPreExecute()执行完后执行   // TODO Auto-generated method stub   Mail m = new Mail("empty.shen@gmail.com", "*****");     String[] toArr = {"silangquan@gmail.com","k283228391@126.com"};   m.setTo(toArr);   m.setFrom("wooo@wooo.com");   m.setSubject("JavamailTest");   m.setBody("Email body.");     try {  //If you want add attachment use function addAttachment.  //m.addAttachment("/sdcard/filelocation");     if(m.send()) {    System.out.println("Email was sent successfully.");   } else {    System.out.println("Email was not sent.");  }   } catch(Exception e) {   //Toast.makeText(MailApp.this, "There was a problem sending the email.", Toast.LENGTH_LONG).show();   Log.e("MailApp", "Could not send email", e);   }    return "";   }     @Override   protected void onProgressUpdate(Integer... progress) {   //这个函数在doInBackground调用publishProgress时触发,虽然调用时只有一个参数   //但是这里取到的是一个数组,所以要用progesss[0]来取值   //第n个参数就用progress[n]来取值    super.onProgressUpdate(progress);   }     @Override   protected void onPostExecute(String r) {   //doInBackground返回时触发,换句话说,就是doInBackground执行完后触发   //这里的result就是上面doInBackground执行后的返回值,所以这里是"执行完毕"   //setTitle(result);   super.onPostExecute(r);   }     }    }

这里用到了AsyncTask,应为直接在UI线程中连接互联网的话,或爆 android.os.NetworkOnMainThreadException异常。

布局文件

主界面的布局文件,非常简单

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  tools:context=".MailActivity" >    <TextView   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_centerHorizontal="true"   android:layout_centerVertical="true"   android:text="@string/hello_world" />    <Button   android:id="@+id/btnSend"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_alignParentLeft="true"   android:layout_alignParentTop="true"   android:layout_marginTop="19dp"   android:text="Send" />   </RelativeLayout>

运行效果图:

Android使用Javamail发送Email群发加附件

点击发送后

Android使用Javamail发送Email群发加附件

android教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android使用Javamail发送Email群发加附件全部内容,希望文章能够帮你解决Android使用Javamail发送Email群发加附件所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。