首页 > 编程 > Java > 正文

使用javamail实现发送邮件(QQ邮箱和163邮箱)

2019-11-06 06:14:46
字体:
来源:转载
供稿:网友

今日研究了一下java发送邮件的程序,有两种方法,一种是用java.mail;一种是用commons-email。

一、JAVA Mail是很常用的用于发送邮件的包,我们可以从这里获取,或者在maven中添加如下配置:

<dependency>   <groupId>com.sun.mail</groupId>   <artifactId>javax.mail</artifactId>   <version>1.5.5</version></dependency>示例代码如下:
package cn.mail.test;import java.util.PRoperties;import javax.mail.Authenticator;import javax.mail.Message.RecipientType;import javax.mail.MessagingException;import javax.mail.PassWordAuthentication;import javax.mail.session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;public class EmailTest {	private static boolean send_QQmail(String strMail, String strTitle, String strText){        boolean bret = false;        try        {            final Properties props = new Properties();            props.put("mail.smtp.auth", "true");            props.put("mail.smtp.host", "smtp.qq.com");            //你自己的邮箱            props.put("mail.user", "xxxxxxx@qq.com");             //你开启pop3/smtp时的验证码            props.put("mail.password", "xxxxxxxx");            props.put("mail.smtp.port", "25");            props.put("mail.smtp.starttls.enable", "true");            Authenticator authenticator = new Authenticator() {                protected PasswordAuthentication getPasswordAuthentication() {                    String userName = props.getProperty("mail.user");                    String password = props.getProperty("mail.password");                    return new PasswordAuthentication(userName, password);                }            };            // 使用环境属性和授权信息,创建邮件会话            Session mailSession = Session.getInstance(props, authenticator);            // 创建邮件消息            MimeMessage message = new MimeMessage(mailSession);            // 设置发件人            String username = props.getProperty("mail.user");            InternetAddress form = new InternetAddress(username);            message.setFrom(form);            InternetAddress to = new InternetAddress(strMail);             message.setRecipient(RecipientType.TO, to);            // 设置邮件标题            message.setSubject(strTitle);            // 设置邮件的内容体            message.setContent(strText, "text/html;charset=UTF-8");            // 发送邮件            Transport.send(message);            bret = true;        }        catch (AddressException e) {             e.printStackTrace();        }        catch (MessagingException e) {             e.printStackTrace();        }        catch (Exception e){            e.printStackTrace();        }        return bret;    }	private static boolean send_163mail(String strMail, String strTitle, String strText){        boolean bret = false;        try        {            final Properties props = new Properties();            props.put("mail.smtp.auth", "true");            props.put("mail.smtp.host", "smtp.163.com");            // 发件人的账号            props.put("mail.user", "xxxxxxxx@163.com");            //发件人的密码            props.put("mail.password", "xxxxxxx");             // 构建授权信息,用于进行SMTP进行身份验证            Authenticator authenticator = new Authenticator() {                @Override                protected PasswordAuthentication getPasswordAuthentication() {                    // 用户名、密码                    String userName = props.getProperty("mail.user");                    String password = props.getProperty("mail.password");                    return new PasswordAuthentication(userName, password);                }            };            // 使用环境属性和授权信息,创建邮件会话            Session mailSession = Session.getInstance(props, authenticator);            // 创建邮件消息            MimeMessage message = new MimeMessage(mailSession);            // 设置发件人            String username = props.getProperty("mail.user");            InternetAddress form = new InternetAddress(username);            message.setFrom(form);            // 设置收件人            InternetAddress to = new InternetAddress(strMail);             message.setRecipient(RecipientType.TO, to);            // 设置邮件标题            message.setSubject(strTitle);            // 设置邮件的内容体            message.setContent(strText, "text/html;charset=UTF-8");            // 发送邮件            Transport.send(message);            bret = true;        }        catch (AddressException e) {             e.printStackTrace();        }        catch (MessagingException e) {             e.printStackTrace();        }        catch (Exception e){            e.printStackTrace();        }        return bret;    }	public static void main(String[] args) {		if (send_qqmail("xxxxxx@qq.com", "测试QQ邮箱发送", "<body><p>你们好吗</p></body>"))            System.out.println("QQ邮件发送成功");        if (send_163mail("xxxxxx@163.com", "测试网易邮箱发送", "<body><p>你们好吗</p></body>"))            System.out.println("网易邮件发送成功");	}}这里的时候,在用QQ邮箱时,发送邮件的邮箱记得开通pop3/smtp服务。

二、使用JAVA Mail我们可以完成邮件的发送,但是我们可以发现实现过程略显复杂,比较繁琐,所以我们可以借助commons-email简化发送邮件的过程,commons-email可以从这里下载,或在maven中添加如下配置:

<dependency>   <groupId>org.apache.commons</groupId>   <artifactId>commons-email</artifactId>   <version>1.4</version></dependency>示例代码如下:
package com.mail.test;import java.util.Date;import org.apache.commons.mail.SimpleEmail;public class CommonsEmailTest{   /**    * 发送文本邮件    *     * @throws Exception    */   public static boolean sendTextMail(String strMail, String strTitle, String strText) throws Exception{	  boolean bret = false;      SimpleEmail mail = new SimpleEmail();      // 设置邮箱服务器信息      mail.setSslSmtpPort("25");      mail.setHostName("smtp.163.com");      // 设置密码验证器      mail.setAuthentication("XXXXXX@163.com", "XXXXXX(授权密码)");      // 设置邮件发送者      mail.setFrom("XXXXXX@163.com");      // 设置邮件接收者      mail.addTo(strMail);      // 设置邮件编码      mail.setCharset("UTF-8");      // 设置邮件主题      mail.setSubject(strTitle);      // 设置邮件内容      mail.setMsg(strText);      // 设置邮件发送时间      mail.setSentDate(new Date());      // 发送邮件      mail.send();	return bret;   }   public static void main(String[] args) {	   try {		if (sendTextMail("YYYYYY@qq.com", "测试QQ邮箱发送", "你们好吗???"))		       System.out.println("QQ邮件发送成功");		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}   }}这里用common-email时,我选择用163邮箱往QQ邮箱上发送邮件,发送成功,代码量也比用mail是简单多了

注意事项:

在用java程序发送邮件时,大部分问题是邮箱没有开通pop3/smtp,会报javax.mail.AuthenticationFailedException,遇到这个问题首先要先确定pop3/smtp服务是否开启,详情参考:http://blog.csdn.net/zouxucong/article/details/60578824

这里,多谢两位大神的文章可供参看

参考文章一:http://blog.csdn.net/jianggujin/article/details/51253129

参考文章二:http://blog.csdn.net/zhang_ruiqiang/article/details/50754615


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表