java实现发送邮件功能
2017-07-04 13:55
555 查看
java实现发送邮件功能
电子邮件开发在后台中是普遍存在的现象和功能,比如用户注册,系统自动发送一封电子邮件到用户邮箱;再比如密码找回,系统会自动把密码发送到用户邮箱;……等等,所以作为一名java程序员,还是有必要学会这项技能的。
我是一名安卓开发人员,我们都知道在客户端和后台交互数据的时候用到了Http协议,那么相应的,邮箱传输也有自己的一套协议,如SMTP,POP3,IMAP。在原生的java JDK中官方为我们封装了Http协议,叫URLConnection,自然的官方也封装了邮件的专属协议,只不过,这个在原生的java JDK中我们找不到,因为它需要我们另外下载。
我们到oracle官网去下载相应的jar包,地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.5-oth-JPR
目前JavaMail的最新版本是1.1.7,我们下载下来如下:
mail.jar就是我们需要的,另外还有文档和官方demo,这里我们就不做过多了解,直接开始本demo。
这里我直接在现有项目中使用JUnit Test测试,大家可以新建普通java项目练习。
import java.util.Date; import java.util.Properties; import javax.mail.Message.RecipientType; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.junit.Test; public class EmailTest { public static final String SMTPSERVER = "smtp.163.com"; public static final String SMTPPORT = "465"; public static final String ACCOUT = "******@163.com"; public static final String PWD = "*******"; @Test public void testSendEmail() throws Exception { // 创建邮件配置 Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty("mail.smtp.host", SMTPSERVER); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty("mail.smtp.port", SMTPPORT); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.auth", "true"); // 需要请求认证 props.setProperty("mail.smtp.ssl.enable", "true");// 开启ssl // 根据邮件配置创建会话,注意session别导错包 Session session = Session.getDefaultInstance(props); // 开启debug模式,可以看到更多详细的输入日志 session.setDebug(true); //创建邮件 MimeMessage message = createEmail(session); //获取传输通道 Transport transport = session.getTransport(); transport.connect(SMTPSERVER,ACCOUT, PWD); //连接,并发送邮件 transport.sendMessage(message, message.getAllRecipients()); transport.close(); } public MimeMessage createEmail(Session session) throws Exception { // 根据会话创建邮件 MimeMessage msg = new MimeMessage(session); // address邮件地址, personal邮件昵称, charset编码方式 InternetAddress fromAddress = new InternetAddress(ACCOUT, "kimi", "utf-8"); // 设置发送邮件方 msg.setFrom(fromAddress); InternetAddress receiveAddress = new InternetAddress( "********@qq.com", "test", "utf-8"); // 设置邮件接收方 msg.setRecipient(RecipientType.TO, receiveAddress); // 设置邮件标题 msg.setSubject("测试标题", "utf-8"); msg.setText("我是个程序员,一天我坐在路边一边喝水一边苦苦检查程序。 这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱。 然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他缓缓地指着我的屏幕说,这里少了个分号"); // 设置显示的发件时间 msg.setSentDate(new Date()); // 保存设置 msg.saveChanges(); return msg; } }
代码量并不是很多,然后JUnit Test Run:
邮件确实收到了,当然这里面的吭还是有的,这里根据我遇到的错误,简单说下:
错误如: DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2
登录失败,这个原因很多。首先我们要保证发送方的邮件,POP3/SMTP服务和IMAP/SMTP服务一定要开启,否则发送失败,拿网易邮箱来说,在如下地方打开此服务:
如果以上确认打开了,接下来我们就要确认密码是否正确,因为我的163邮箱开启了客户端授权密码,所以这里一定要注意,这里必须填写客户端授权密码才可以,否则也会出现如上错误。
我碰到的问题就上面的一个,如果有问题或者意见的朋友,欢迎大家随时交流。
相关文章推荐
- 强大的java编程实现邮件发送功能,支持内容,上传多个图片和多个附件
- Java的Spring框架中实现发送邮件功能的核心代码示例
- Java实现邮件发送功能
- JavaWeb中使用JavaMail实现发送邮件功能实例详解
- 基于JavaMail的Java实现复杂邮件发送功能
- Java 实现发送邮件功能
- java+jsp+struts2实现发送邮件功能
- java后台实现发送邮件的功能
- java实现发送邮件功能
- 使用java实现邮件发送功能(已封装)
- Java实现发送邮件功能(可带附件)
- Java实现发送邮件功能
- javaMail Java实现邮件发送,群发功能,java发送邮件
- 在java程序中实现发送邮件的功能
- 在java程序中实现发送邮件的功能
- Java实现发送邮件功能时碰到的坑
- java实现邮件发送功能工具类
- javaMail Java实现邮件发送,群发功能,java发送邮件
- Java实现带附件的邮件发送功能
- java实现发送邮件功能