在google code上有一个现成的javaMail的java邮件客户端,我们只需要调用其中的接口就可以了。下面放出使用javaMail的一个demo源代码。

1.自己封装一个邮件发送类MailSender。

public class MailSender extends Authenticator {

private String user;
private String password;
private Session session;
private String mailhost = "smtp.gmail.com";//默认用gmail发送
private Multipart messageMultipart;
private Properties properties;
static {
Security.addProvider(new JSSEProvider());
}

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

properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.host", mailhost);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "465");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
properties.setProperty("mail.smtp.quitwait", "false");

session = Session.getDefaultInstance(properties, this);
messageMultipart=new MimeMultipart();
}

protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}

public synchronized void sendMail(String subject, String body,
String sender, String recipients,String attachment) throws Exception {
MimeMessage message = new MimeMessage(session);
message.setSender(new InternetAddress(sender));//邮件发件人
message.setSubject(subject);//邮件主题
//设置邮件内容
BodyPart bodyPart=new MimeBodyPart();
bodyPart.setText(body);
messageMultipart.addBodyPart(bodyPart);
// message.setDataHandler(handler);

//设置邮件附件
if(attachment!=null){
DataSource dataSource=new FileDataSource(attachment);
DataHandler dataHandler=new DataHandler(dataSource);
bodyPart.setDataHandler(dataHandler);
bodyPart.setFileName(attachment.substring(attachment.lastIndexOf("/")+1));
}
message.setContent(messageMultipart);
if (recipients.indexOf(',') > 0)
//多个联系人
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(recipients));
else
//单个联系人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
recipients));
Transport.send(message);
}

//继承DataSource设置字符编码
public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;

public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}

public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}

public void setType(String type) {
this.type = type;
}

public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}

public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}

public String getName() {
return "ByteArrayDataSource";
}

public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}

public PrintWriter getLogWriter() throws SQLException {
// TODO Auto-generated method stub
return null;
}

public int getLoginTimeout() throws SQLException {
// TODO Auto-generated method stub
return 0;
}

public void setLogWriter(PrintWriter out) throws SQLException {
// TODO Auto-generated method stub

}

public void setLoginTimeout(int seconds) throws SQLException {
// TODO Auto-generated method stub

}

public boolean isWrapperFor(Class<?> arg0) throws SQLException {
// TODO Auto-generated method stub
return false;
}

public <T> T unwrap(Class<T> arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}

public Connection getConnection() throws SQLException {
// TODO Auto-generated method stub
return null;
}

public Connection getConnection(String theUsername, String thePassword)
throws SQLException {
// TODO Auto-generated method stub
return null;
}
}

public String getMailhost() {
return mailhost;
}

public void setMailhost(String mailhost) {
this.mailhost = mailhost;
properties.setProperty("mail.host", this.mailhost);
}
}

2.JSSE将帮助处理TLS和SSL业务

public class JSSEProvider extends Provider {

public JSSEProvider() {
        super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
        AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
            public Void run() {
                put("SSLContext.TLS",
                        "org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
                put("Alg.Alias.SSLContext.TLSv1", "TLS");
                put("KeyManagerFactory.X509",
                        "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
                put("TrustManagerFactory.X509",
                        "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
                return null;
            }
        });
    }
}

3.主activity调用邮件发送类

public class MainActivity extends Activity {

private Button sendButton = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendButton = (Button) this.findViewById(R.id.send_btn);
sendButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
SenderRunnable senderRunnable = new SenderRunnable(
"xxxxxxx@163.com", "xxxxxxxx");
senderRunnable.setMail("this is the test subject",
"this is the test body", "xxxxxxxxx@gmail.com","/mnt/sdcard/test.txt");
new Thread(senderRunnable).start();
}
});
}

public boolean onCreateOptionsMenu(Menu menu) {
}
//android3.2不允许主线程通信

class SenderRunnable implements Runnable {

private String user;
private String password;
private String subject;
private String body;
private String receiver;
private MailSender sender;
private String attachment;

public SenderRunnable(String user, String password) {
this.user = user;
this.password = password;
sender = new MailSender(user, password);
String mailhost=user.substring(user.lastIndexOf("@")+1, user.lastIndexOf("."));
if(!mailhost.equals("gmail")){
mailhost="smtp."+mailhost+".com";
Log.i("hello", mailhost);
sender.setMailhost(mailhost);
}
}

public void setMail(String subject, String body, String receiver,String attachment) {
this.subject = subject;
this.body = body;
this.receiver = receiver;
this.attachment=attachment;
}

public void run() {
// TODO Auto-generated method stub
try {
sender.sendMail(subject, body, user, receiver,attachment);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

项目全部源码下载地址:http://download.csdn.net/detail/xanxus46/4888658

javaMail地址:http://code.google.com/p/javamail-android/,使用时记得把三个jar包导入构建路径

javaMail的java邮件相关推荐

  1. 内网java发送邮件_基于JavaMail的Java邮件发送:简单邮件发送

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...

  2. mail java_基于JavaMail的Java邮件发送:简单邮件发送

    http://blog.csdn.net/xietansheng/article/details/51673073 http://www.cnblogs.com/codeplus/archive/20 ...

  3. java邮件中添加excel_基于javaMail的邮件发送--excel作为附件

    基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...

  4. java编写两邮件传输,JAVA邮件发送(文字+图片+附件)【源码】

    介绍: 电子邮件协议 电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP.其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMT ...

  5. java mail smtps,使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会

    使用javamail发SMTPS邮件,javamailsmtps邮件,Java通常情况下都不会 Java 通常情况下都不会对smtp发邮件加密,但是gmail做了加密. 首先需要引用 Javamail ...

  6. java 发送邮件昵称_利用JavaMail发送QQ邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  7. 【Java】JavaMail编程实现邮件客户端-OutBox InBox

    在上一篇<JavaMail编程实现邮件客户端-总览>中我们已经说完了邮箱客户端的登录界面.主界面,在主界面上点击OutBox按钮就能够进入发件箱,点击InBox按钮就能进入收件箱.这篇文章 ...

  8. 【Java】JavaMail编程实现邮件客户端-总览

    1.实验要求. 编写图形用户界面,实现邮件客户端软件的设计与开发.用实际的邮箱账号密码进行登录. 客户端要求可以完成邮件编辑. 客户端要求可以配置与标准邮件服务器的连接. 客户端可以发送邮件,并可以粘 ...

  9. java mail outlook_无法使用JavaMail读取Outlook邮件,而使用Gmail工作

    基本上,我编写了一个可从收件箱中读取电子邮件的应用程序.我一直使用Gmail发送的电子邮件测试应用程序.但是现在,当我试图阅读从Outlook发送的电子邮件时,我没有收到任何内容.无法使用JavaMa ...

最新文章

  1. 制胜人工智能时代——企业人工智能应用现状分析(第三版)
  2. 姜宁谈红帽绩效考核:不关心员工具体做什么
  3. 吴恩达机器学习系列课程--个人笔记
  4. 机器学习的练功方式(五)——模型选择及调优
  5. 真实的产品案例:实现文档边缘检测
  6. 推荐 :深度学习初学者不可不知的25个术语和概念(上)
  7. 最大连续子数组和 动态规划_53. 最大子序和(动态规划)
  8. 日式餐饮主题PPT模板
  9. 代理ip填写格式有什么要求?
  10. atomic原子类实现机制_atomic实现原理
  11. linux gdb 跳出函数,gdb调试程序时跳进函数和跳出函数
  12. 如何使用.NET来打造一个QQ界面
  13. 帝国CMS模板,免费帝国CMS模板,帝国CMS建站教程
  14. js实现复制文本及其排版格式
  15. AI反网络诈骗白皮书发布:一场人工智能与电信网络诈骗结合的攻防战
  16. 爬虫(2)-解析库xpath和beautifulsoup爬取猫眼电影排行榜前100部电影
  17. PID file not written; -detached was passed,安装rabbitmq启动失败
  18. Was8.5静默安装完整步骤
  19. PJBlog安全性分析
  20. Word2vec-Tensorflow实战

热门文章

  1. 剑与远征怎么注销服务器,剑与远征怎么删除账号 剑与远征删除账号的方法
  2. 《穷查理宝典》芒格思维笔记(二)
  3. 最快服务器地址,如何可以选择适合自己的最快的DNS服务器?
  4. 官方不支持,我来支持,autojs支持db操作
  5. 唐玄宗:谁想跟朕去打马球?在线等,挺急的
  6. 量化交易:低频配对统计套利
  7. HTML5淡黄色企业品牌专题网站模板
  8. MarioGPT自动生成“超级玛丽”;周鸿祎:ChatGPT可能产生意识;国内版ChatGPT复旦首发,但“非常不成熟”...
  9. 知识||热电偶与热电阻的安装方法
  10. js打开页面自动复制文本到剪贴板_word基本编辑的方法?word基本知识文件操作和文本编辑?...