- 浏览: 21863 次
- 性别:
- 来自: 广州
最新评论
-
liu321jie:
求完整代码,873655467@qq.com
android 邮件开发(javax.mail) -
llzz1985:
很给力啊,不知道能不能发个完整例子代码呢?谢了先!我email ...
android 邮件开发(javax.mail)
以前在csdn上发贴求助android邮件开发的开发,后来问题自己解决了。有很多网友遇到了同样的问题,发邮件问我都没及时回复。在这里我把封存装的email源代码贴出来,和大家分享。
android开发邮件需要添加三个扩展包:mail.jar,additional.jar,和activation.jar。直接用java开发,则只需前面两个包。两种不同的开发方式,包的版本是不同的。
封装了一个SMailSender 类,类是Runnable的实现,也就是邮件功能可作为一个线程在后台运行。SMailSender类目前只支持gmail、126和163三种邮箱,如果要支持其他邮箱,可根据邮箱的协议类型进行相应的扩展。
SMailSender.java
上面的类调用比较简单,再给一个使用的实例MailBackground.java:
OK,你可以发送以上三种格式的邮件了。
android开发邮件需要添加三个扩展包:mail.jar,additional.jar,和activation.jar。直接用java开发,则只需前面两个包。两种不同的开发方式,包的版本是不同的。
封装了一个SMailSender 类,类是Runnable的实现,也就是邮件功能可作为一个线程在后台运行。SMailSender类目前只支持gmail、126和163三种邮箱,如果要支持其他邮箱,可根据邮箱的协议类型进行相应的扩展。
SMailSender.java
package com.jia.test; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; 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; import android.util.Log; public class SMailSender implements Runnable { private final String Tag = "SMailSender"; private String mSmtp_host; private String mFrom_userName; private String mFrom_passWord; private String mShow_name = "Jiahe"; private MimeMessage mMimeMsg; // 要发送的email信息 private Session mSession; private Multipart mp; // 存放邮件的title 内容和附件 private String mSubject; private String mContent; private String mToId = null; private String mCcId = null; private String mBccId = null; private String mFilePath = null; private final int NONE = 0; private final int CONNECTING = 1; private final int CONNECTED = 2; private final int SENDING = 3; private final int SENDED = 4; private int mState; public enum MailType { TYPE_GMAIL, TYPE_126, TYPE_163, TYPE_QQ; } private MailType mailType; //private Properties props; /** * 构造函数 * @param hostName */ public SMailSender(){ // mSmtp_host = "smtp.gmail.com"; mp = new MimeMultipart(); } public SMailSender(String hostName){ // mSmtp_host = hostName; mp = new MimeMultipart(); } /** * 设置发件人的用户名和密码 * 目前只支持gmail、126、163邮箱 * @param _userName * @param _password */ public boolean setAuthor(String _userName, String _password){ mFrom_userName = _userName; mFrom_passWord = _password; return setHost(mFrom_userName); //设置邮箱类型 } /** * 设置邮件主题 * @param subject */ public void setSubject(String subject){ if(subject!= null) mSubject = subject; } /** * 设置邮件内容 * @param content */ public void setContent(String content){ if(content != null) mContent = content; } /** * 设置收件人,收件人之间用";"隔开 * @param to * @return */ public void setTo(String toId){ mToId = toId; } /** * 设置邮件抄送人,抄送人之间用";"隔开 * @param copyto * @return */ public void setCc(String ccId){ mCcId = ccId; } /** * 设置暗抄送人,暗抄送人之间用";"隔开 * @param bcopyto * @return */ public void setBcc(String bccId){ mBccId = bccId; } public void setShowName(String name){ mShow_name = name; } /** * 设置附件路径,路径之间用";"隔开 * @param path */ public void addFileAffix(String path){ mFilePath = path; } public int getMailState(){ return mState; } @Override public void run() { executeMailandSend(); } private boolean setSendToMsg(String to) { if (to.equals("") || to == null) { return false; } try { String sendto[]; sendto = to.split(";"); for (int i = 0; i < sendto.length; i++) { mMimeMsg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(sendto[i])); } return true; } catch (Exception e) { return false; } } private boolean setCopyToMsg(String copyto) { if (copyto.equals("") || copyto == null) { return false; } try { String copy[]; copy = copyto.split(";"); for (int i = 0; i < copy.length; i++) { mMimeMsg.addRecipients(Message.RecipientType.CC, InternetAddress.parse(copy[i])); } return true; } catch (Exception e) { return false; } } private boolean setBCopyToMsg(String bcopyto){ if (bcopyto.equals("") || bcopyto == null) { return false; } try { String bcopy[]; bcopy = bcopyto.split(";"); for (int i = 0; i < bcopy.length; i++) { mMimeMsg.addRecipients(Message.RecipientType.BCC, InternetAddress.parse(bcopy[i])); } return true; } catch (Exception e) { return true; } } private boolean setContentMp(String conMp){ try { BodyPart bp = new MimeBodyPart(); bp.setContent( "<meta http-equiv=Context-Type context=text/html;charset=gb2312>" + conMp, "text/html;charset=GB2312"); mp.addBodyPart(bp); return true; } catch (Exception e) { System.out.println("Set context Faild! " + e); return false; } } private boolean addFile(String filePath){ // System.out.println("add affix.."); if (filePath.equals("") || filePath == null) { return false; } String file[]; file = filePath.split(";"); // System.out.println("you have " + file.length + " affix!"); try { for (int i = 0; i < file.length; i++) { BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(file[i]); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(fileds.getName()); mp.addBodyPart(bp); } return true; } catch (Exception e) { Log.d(Tag, "add affix: " + filePath + "--faild!" + e); System.err.println("add affix: " + filePath + "--faild!" + e); return false; } } private boolean setHost(String mailAddress){ if(mailAddress.contains("@gmail.")){ mSmtp_host = "smtp.gmail.com"; mailType = MailType.TYPE_GMAIL; return true; } if(mailAddress.contains("@126.")){ mSmtp_host = "smtp.126.com"; mailType = MailType.TYPE_126; return true; } if(mailAddress.contains("@163.")){ mSmtp_host = "smtp.163.com"; mailType = MailType.TYPE_163; return true; } else return false; /* if(mailAddress.contains("@qq.")){ mSmtp_host = "smtp.qq.com"; mailType = MailType.TYPE_QQ; }*/ } private void executeMailandSend() { try { mState = NONE; Properties props = System.getProperties(); props = System.getProperties(); if(mailType == MailType.TYPE_GMAIL){ //如果为gmail邮箱,需要设置下两项 props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.port", "587"); // gmail smtp port 587 / 465 } props.put("mail.smtp.host", mSmtp_host); props.put("mail.smtp.user", mFrom_userName); props.put("mail.smtp.password", mFrom_passWord); props.put("mail.smtp.auth", "true"); mSession = Session.getDefaultInstance(props, null); mSession.setDebug(false); mMimeMsg = new MimeMessage(mSession); mMimeMsg.setFrom(new InternetAddress(mFrom_userName)); //mMimeMsg.setContent(mContent, "text/html;charset=utf-8"); if(mToId != null) setSendToMsg(mToId); if(mCcId != null) setCopyToMsg(mCcId); if(mBccId != null) setBCopyToMsg(mBccId); if(mSubject != null){ mMimeMsg.setSubject(mSubject); } if(mShow_name != null){ mMimeMsg.setFrom(new InternetAddress(mShow_name + "<" + mFrom_userName + ">")); } if(mContent != null){ setContentMp(mContent); mMimeMsg.setContent(mp); } if(mFilePath != null){ addFile(mFilePath); } System.out.println(mMimeMsg.getAllRecipients().toString()); Transport transport = mSession.getTransport("smtp"); System.out.println("connecting..."); mState = CONNECTING; transport.connect(mSmtp_host, mFrom_userName, mFrom_passWord); mState = CONNECTED; Log.i(Tag, "Connected to " + mFrom_userName + " succuss"); System.out.println("sending..."); mState = SENDING; transport.sendMessage(mMimeMsg, mMimeMsg.getAllRecipients()); mState = SENDED; transport.close(); Log.i(Tag, "Send a mail to " + mToId); System.out.println("send an email to " + mToId + " success"); } catch (Exception e) { System.out.println("failure! "); Log.d(Tag, " failure! ", e); e.printStackTrace(); } } }
上面的类调用比较简单,再给一个使用的实例MailBackground.java:
package com.jia.test; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MailBackground extends Activity{ private EditText mEditText_1; private EditText mEditText_2; private EditText mEditText_3; private EditText mEditText_4; // private EditText mEditText_5; private Button mButton; private TextView mTextView; SMailSender mail; private int mPreState; private int mRealState; private Thread thread_mail; @Override public void onBackPressed() { super.onBackPressed(); finish(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mail_layout); mEditText_1 = (EditText)findViewById(R.id.email_num_to); mEditText_1.setText("sanditest01@126.com"); mEditText_2 = (EditText)findViewById(R.id.email_num_cc); mEditText_2.setText("sanditest02@163.com"); mEditText_3 = (EditText)findViewById(R.id.email_subject); mEditText_3.setText("hello, this is a test email"); mEditText_4 = (EditText)findViewById(R.id.email_text); //mEditText_4.setText("您好:\n this is a test email, you don't need to reply to, thanks for your help!"); mEditText_4.setText("this is a test email, you don't need"); // mEditText_5 = (EditText)findViewById(R.id.email_file); // mEditText_5.setText(""); mTextView = (TextView)findViewById(R.id.email_file_view); mButton = (Button)findViewById(R.id.button_sendEmail); mButton.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { System.out.println("send clicked"); String to = mEditText_1.getText().toString(); String cc = mEditText_2.getText().toString(); String subject = mEditText_3.getText().toString(); String content = mEditText_4.getText().toString(); // String filePath = mEditText_5.getText().toString(); mail = new SMailSender(); // mail.setAuthor("sanditest01@126.com", "sanditest"); mail.setAuthor("sanditest01@gmail.com", "sanditest"); // mail.setAuthor("sanditest02@163.com", "sanditest"); mail.setShowName("Sandi"); mail.setTo(to); //密码:sanditest mail.setCc(cc); mail.setSubject(subject); mail.setContent(content); mRealState = mPreState = 0; thread_mail = new Thread(mail); new Thread(r); thread_mail.start(); //启动发送线程 //thread_state.start(); //启动状态监视线程 Monitor(); } }); } Runnable r = new Runnable(){ public void run() { while(true){ try { Thread.sleep(100); mRealState = mail.getMailState(); System.out.println("mRealState = " + mRealState); if(mRealState == mPreState) continue; if(1 == mRealState){ mPreState = mRealState; System.out.println("Toast mRealState2 = " + mRealState); } if(2 == mRealState){ mPreState = mRealState; } if(3 == mRealState){ mPreState = mRealState; } if(4 == mRealState){ //邮件发送成功,线程退出 mPreState = mRealState; break; } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; protected void Monitor() { while (true) { try { Thread.sleep(10); mRealState = mail.getMailState(); //System.out.println("mRealState = " + mRealState); if (mRealState == mPreState) continue; if (1 == mRealState) { mPreState = mRealState; mTextView.setText("Connecting..."); System.out.println("Toast mRealState1 = " + mRealState); // setTitle("Connecting..."); Toast.makeText(MailBackground.this, "Connecting", Toast.LENGTH_SHORT).show(); System.out.println("Toast mRealState2 = " + mRealState); } if (2 == mRealState) { mPreState = mRealState; mTextView.setText("Connecting success"); // setTitle("Connected success"); Toast.makeText(getApplicationContext(), "Connecting", Toast.LENGTH_SHORT).show(); } if (3 == mRealState) { mPreState = mRealState; mTextView.setText("Sending"); Toast.makeText(getApplicationContext(), "Sending", Toast.LENGTH_SHORT).show(); } if (4 == mRealState) { // 邮件发送成功,线程退出 mPreState = mRealState; mTextView.setText("Send email success"); Toast.makeText(getApplicationContext(), "Send success!", Toast.LENGTH_SHORT).show(); break; } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
OK,你可以发送以上三种格式的邮件了。
- mail.zip (489.1 KB)
- 下载次数: 400
评论
2 楼
liu321jie
2013-04-27
求完整代码,873655467@qq.com
1 楼
llzz1985
2011-09-09
很给力啊,不知道能不能发个完整例子代码呢?谢了先!我email:llzz1985@163.com
发表评论
-
Android开发之多点触摸(Multitouch)[转]
2011-03-16 09:43 958如果您对开发多点触摸程序感兴趣的话,那么本文将是一个很好的开始 ... -
在Bitmap上画图,并显示
2011-03-06 17:31 1790通过以下代码,可以在一个Activity中画图,也可将其作为B ... -
java解析xml文件方法
2011-02-18 16:28 1163对xml数据的解析,在网络程序中经常会用到。在这里介绍 ... -
android 调用.net的web Service开发 (KSOAP2)
2011-02-18 11:49 2985网上有很多关于android 的 web servic ... -
常用的小方法,避免忘记,在此记录一下
2011-02-18 11:30 8281. 将Activity设置为对话框模式 例如: <ac ... -
Android弹出拨号界面和拨打电话实现(转)
2011-02-14 13:47 2731需要使用反射机制将ITelephony反射出来进行操作。 p ... -
google Map的一个简单实例
2011-01-17 11:24 1369public class mapActivity extend ...
相关推荐
通过java扩展包javax.mail-1.4.4.jar实现邮件发送功能。 import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart...
赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...
赠送jar包:javax.mail-1.6.2.jar; 赠送原API文档:javax.mail-1.6.2-javadoc.jar; 赠送源代码:javax.mail-1.6.2-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.6.2.pom; 包含翻译后的API文档:javax.mail...
基于Maven的javax.mail发送邮件例子程序 pom.xml添加依赖jar: <groupId>javax.mail <artifactId>mail ${javamail.version} </dependency> <javamail.version>1.4.1</javamail.version> /* 功能:...
javax.mail.jar-Java发送邮件API。Apache Email基于javax.mail做了一个开源项目,参见:http://commons.apache.org/proper/commons-email/
赠送jar包:javax.mail-1.5.6.jar; 赠送原API文档:javax.mail-1.5.6-javadoc.jar; 赠送源代码:javax.mail-1.5.6-sources.jar; 赠送Maven依赖信息文件:javax.mail-1.5.6.pom; 包含翻译后的API文档:javax.mail...
javax.mail-1.6.0.jar包及移入maven仓库语句
通过错误描述我们发现java.lang.NoClassDefFoundError: javax/mail/MessagingException,主要说找不到这个类。通过查询发现是缺少javax.mail-api-1.6.2.jar和activation-1.1.1.jar包。在maven上下载即可
javax.mail发送邮件
JDK官方的Java Mail工具,可实现收发邮件。
发邮件程序需要的:javax.mail包
Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....
发送邮件时这个包没导入报错javax.mail.jar!
Files contained in javax.persistence.jar: META-INF/MANIFEST.MF javax.persistence.Access.class javax.persistence.AccessType.class javax.persistence.AssociationOverride.class javax.persistence....
基于javax.mail的邮件发送测试工具
javax.mail.jar
javax.jms.BytesMessage.class javax.jms.Connection.class javax.jms.ConnectionConsumer.class javax.jms.ConnectionFactory.class javax.jms.ConnectionMetaData.class javax.jms.DeliveryMode.class javax.jms....
javax.mail-1.5.2源码
JSP发送邮件实例 利用javax.mail和java.activation这两个包. JSP发送邮件实例 利用javax.mail和java.activation这两个包.
javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar javax.jar ...