JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Message对象中封装的邮件数据发送到指定的SMTP服务器。使用JavaMail发送邮件时设计到的主要API之间的工作关系如下所示:

1、从Session对象中获得实现了某种邮件发送协议的Transport对象;

2、使用Session对象创建Message对象,并调用Message对象的方法封装邮件数据;

3、连接指定的SMTP服务器,调用Transport对象中的邮件发送方法Message对象中封装的邮件数据。

JavaMail入门第二篇 创建邮件一文中,我们学会了创建邮件,不过当时我们是将邮件写入到我们的本地磁盘中,接下来我们用JavaMail API提供的Transport类来发送邮件

  1. import java.util.Date;
  2. import java.util.Properties;
  3.  
  4. import javax.mail.Message;
  5. import javax.mail.Session;
  6. import javax.mail.Transport;
  7. import javax.mail.internet.InternetAddress;
  8. import javax.mail.internet.MimeMessage;
  9.  
  10. public class SendTextMail {
  11. public static void main(String[] args) throws Exception {
  12. String from = "123456@qq.com";
  13. String to = "123456@163.com";
  14. String subject = "test";
  15. String body = "test!!!";
  16. String smtpHost = "smtp.qq.com";
  17.  
  18. Properties props = new Properties();
  19. props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)
  20. props.setProperty("mail.smtp.host", smtpHost); // 发件人的邮箱的 SMTP服务器地址
  21. props.setProperty("mail.smtp.auth", "true"); // 请求认证,参数名称与具体实现有关
  22.  
  23. // 创建Session实例对象
  24. Session session = Session.getDefaultInstance(props);
  25. // 创建MimeMessage实例对象
  26. MimeMessage message = new MimeMessage(session);
  27. // 设置发件人
  28. message.setFrom(new InternetAddress(from));
  29. // 设置收件人
  30. message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
  31. // 设置发送日期
  32. message.setSentDate(new Date());
  33. // 设置邮件主题
  34. message.setSubject(subject);
  35. // 设置纯文本内容的邮件正文
  36. message.setText(body);
  37. // 保存并生成最终的邮件内容
  38. message.saveChanges();
  39. // 设置为debug模式, 可以查看详细的发送 log
  40. session.setDebug(true);
  41. // 获取Transport对象
  42. Transport transport = session.getTransport("smtp");
  43. // 第2个参数需要填写的是QQ邮箱的SMTP的授权码,什么是授权码,它又是如何设置?
  44. transport.connect(from, "****************");
  45. // 发送,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
  46. transport.sendMessage(message, message.getAllRecipients());
  47. transport.close();
  48. }
  49. }

注意:邮箱账号必须要开启SMTP服务。

发送带内嵌资源或者是带附件的复杂邮件代码与JavaMail入门第二篇 创建邮件一文中类似,只是将写入硬盘的步骤替换成上面代码中的42-47行即可,既然有发送邮件,当然也有接收邮件,下一篇JavaMail入门第四篇 接收邮件将介绍如何接收邮件。

JavaMail入门第三篇 发送邮件的更多相关文章

  1. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  2. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  3. Html/Css(新手入门第三篇)

    一.学习心得---参考优秀的网页来学习. 1我们只做的静态网页主要用的技术?html+css 只要网上看到的,他的源代码公开的.[1].先去分析,他们页面是如何布局(结构化)[2].再试着去做一下,- ...

  4. Android JNI入门第三篇——jni头文件分析

    一. 首先写了java文件: public class HeaderFile { private native void  doVoid(); native int doShort(); native ...

  5. Java线程入门第三篇

    Java内存模型(jmm) Why:保证多线程正确协同工作 看图说明: 文字解释:线程a和线程b通信过程,首先线程a把本地内存的共享变量更新到主内存中,然后线程b去读取主内存的共享变量,最后更新到自己 ...

  6. Visualforce入门第三篇_2017.3.2

    Visualforce实现显示Record List(列表) 详细见链接:https://trailhead.salesforce.com/modules/visualforce_fundamenta ...

  7. Hadoop入门第三篇-MapReduce试手以及MR工作机制

    MapReduce几个小应用 上篇文章已经介绍了怎么去写一个简单的MR并且将其跑起来,学习一个东西动手还是很有必要的,接下来我们就举几个小demo来体验一下跑起来的快感. demo链接请参照附件:ht ...

  8. jQuery入门第三

    jQuery入门第三 1.HTML 2.CSS 衣服 3.javascript 可以动的人 4.DOM 编程 对html文档的节点操作 5.jQuery 对 javascript的封装 简练的语法 复 ...

  9. Kotlin入门第三课:数据类型

    前文链接: Kotlin学习第一课:从对比Java开始 Kotlin入门第二课:集合操作 初次尝试用Kotlin实现Android项目 Kotlin的数据类型与Java类似,因此这篇文章主要看Kotl ...

随机推荐

  1. c++算法应用 预备

    章 C + +程序设计 大家好!现在我们将要开始一个穿越" 数据结构.算法和程序" 这个抽象世界的特殊旅程,以解决现实生活中的许多难题.在程序开发过程中通常需要做到如下两点:一是高 ...

  2. floor相关

    select floor(@f*0.22) -- 直接可显示结果 create table demo( id ,), id1 int ) select * from demo insert into ...

  3. Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object

    本地原来已经安装了JAVA JDK1.7并配置好了环境变量; 然后又安装了JDK8,想2个版本并存. 然后发现eclipse 打不开,闪退.然后查看环境: 发现 C:\Users\Administra ...

  4. WPF打印票据

    最近工作的内容是有关于WPF的,整体开发没有什么难度,主要是在打印上因为没有任何经验,犯了一些难,不过还好,解决起来也不是很费劲. WPF打印票据或者是打印普通纸张区别不大,只是说打印票据要把需要打的 ...

  5. wav 转换到 flac

    参考自:http://so.trust.blog.163.com/blog/static/17188620020127197618621/ wav  无损无压缩: flac无损压缩 将 wav 转换到 ...

  6. 把Arraylist转换成GameObject[]

    ArrayList a = new ArrayList(); GameObject g = new GameObject("g"); a.Add(g); GameObject[] ...

  7. WPF国际化(多语言)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  8. 微信、qq时间格式模板

    产品近来蛋疼,时间格式从做完到现在改了四遍了 ,最新的要求如下: * 2分钟内 无显示 * 2分钟-24小时 HH:mm * 昨天 昨天 HH:mm * 前天 前天 HH:mm * 今年 MM:DD ...

  9. 安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)

    这几天一直研究在安卓开发中图片应该如何处理,在网上翻了好多资料,这里做点小总结,如果朋友们有更好的解决方案,可以留言一起交流下. 内存缓存技术 在我们开发程序中要在界面上加载一张图片是件非常容易的事情 ...

  10. 浅析Objective-C的copy

    一直对NSObject的copy方法似懂非懂,今天工作做完了,整理一下 深复制和浅复制是什么在这里就不赘述 今天主要分三种类型对copy进行探讨:系统非容器类对象.系统容器类对象和自定义对象 系统非容 ...