java发送邮件

1.邮件服务器

  • 通过程序对邮件进行操作,首先需要开通邮件的pop3/smtp服务,本文主要使用的是smtp方式
    开通方式通常的进入邮件设置功能 ⇒ POP3/IMAP/SMTP服务 ⇒ 开启即可,qq邮箱和网易邮箱开启后会有另外一个登录密码,记得保存(发短信一条要一毛钱啊!!),189邮箱使用的则是账号密码,其余邮箱自行探索

2.java中发送邮件

2.1引包

		<dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>

2.2代码

import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.sun.mail.util.MailSSLSocketFactory;

public class SendMailUtils {
	
	private Log log = LogFactory.getLog(SendMailUtils.class);
	
	/**
	 * 使用的邮件服务器 smtp.qq.com
	 */
	private String host;
	/**
	 * 账号
	 */
	private String username;
	/**
	 * 密码
	 */
	private String password;
	
	public void sendMail(String toMail, String,title, String contant) throws Exception {
        log.info("开始发送邮件给:"+toMail);
   
		Properties prop = new Properties();
	    prop.setProperty("mail.smtp.host", host);
	    //发件端口一般采用25/465/587 可以根据实际进行调整
	    prop.setProperty("mail.smtp.port", "465");
	    prop.setProperty("mail.smtp.socketFactory.port","465");
	    prop.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
	    prop.setProperty("mail.transport.protocol", "smtp");
	    prop.setProperty("mail.smtp.auth", "true");
	    // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
	    MailSSLSocketFactory sf = new MailSSLSocketFactory();
	    sf.setTrustAllHosts(true);
	    prop.put("mail.smtp.ssl.enable", true);
	    prop.put("mail.smtp.ssl.socketFactory", sf);
        //1、创建定义整个应用程序所需的环境信息的 Session 对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码
                return new PasswordAuthentication(username, password);
            }
        });
        //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);
        //2、通过session得到transport对象
        Transport ts = session.getTransport();
        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect(host, username, password);
        //4、创建邮件
        MimeMessage message = new MimeMessage(session);
        //设置发件人
        message.setFrom(new InternetAddress(username));
        //此处可以填写多个邮件地址 本文中不需要所以就只对应1个 如果需要抄送可以将类型改为RecipientType.CC
        InternetAddress[] sendTo = new InternetAddress[1];
        sendTo[0] = new InternetAddress(toMail, "", "UTF-8");
        message.setRecipients(Message.RecipientType.TO, sendTo);
        message.setSubject(title);
        //文本
        MimeBodyPart text = new MimeBodyPart();
        text.setContent(contant,"text/html;charset=utf-8");
        //拼装邮件正文内容
        MimeMultipart multipart1 = new MimeMultipart();
        multipart1.addBodyPart(text);
        //1.文本和图片内嵌成功!
        multipart1.setSubType("related");
        //将拼装好的正文内容设置为主体
        MimeBodyPart contentText =  new MimeBodyPart();
        contentText.setContent(multipart1);
        message.setContent(multipart1);
        //保存修改
        message.saveChanges();
        log.info("开始发送");
        //发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
        log.info("发送成功!!!");
    }
}
  1. 由于本文不需要设置附件图片(懒)所以就不贴上去了

2.3调试

  • 本人在调试过程中出现较多的无法连接情况,具体原因分为3种:
    1)服务器与邮件服务器直接网络不通
    2)连接的邮件服务器端口不正确
    3)pops参数多了或者少了
    针对与第三种情况,会出现javax.mail.MessagingException: Could not connect to SMTP host…
    此时建议优先调整pops参数
		Properties prop = new Properties();
        prop.setProperty("mail.smtp.host", host);
        //发件端口一般采用25/465/587 可以根据实际进行调整
        prop.setProperty("mail.smtp.port", "465");
        prop.setProperty("mail.smtp.socketFactory.port","465");
        prop.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        prop.setProperty("mail.transport.protocol", "smtp");
        prop.setProperty("mail.smtp.auth", "true");
        // 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable", true);
        prop.put("mail.smtp.ssl.socketFactory", sf);
  • 最后祝大家永远没有bug,调试一次过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值