java发送Email邮件

JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。
本次以QQ邮箱为例。

1、开通邮箱的stmp功能,获取授权码,在登录时所用到的密码就是此授权码。

这里写图片描述

这里写图片描述

这里写图片描述

2、下载我们所需要的jar包,mailapi.jar和smtp.jar。

所需jar包

3、创建Email公用类。
package com.lumitest.util;

import java.util.ArrayList;
import java.util.List;

public class Email {

    private String smtpServer; // SMTP服务器地址
    private String port; // 端口
    private String username; // 登录SMTP服务器的用户名
    private String password; // 登录SMTP服务器的密码
    private List<String> recipients = new ArrayList<String>(); // 收件人地址集合
    private String subject; // 邮件主题
    private String content; // 邮件正文
    private List<String> attachmentNames = new ArrayList<String>(); // 附件路径信息集合



    public Email() {
        super();
    }

    public Email(String smtpServer, String port, String username,
            String password, List<String> recipients, String subject,
            String content, List<String> attachmentNames) {
        super();
        this.smtpServer = smtpServer;
        this.port = port;
        this.username = username;
        this.password = password;
        this.recipients = recipients;
        this.subject = subject;
        this.content = content;
        this.attachmentNames = attachmentNames;
    }

    public String getSmtpServer() {
        return smtpServer;
    }

    public void setSmtpServer(String smtpServer) {
        this.smtpServer = smtpServer;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<String> getRecipients() {
        return recipients;
    }

    public void setRecipients(List<String> recipients) {
        this.recipients = recipients;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public List<String> getAttachmentNames() {
        return attachmentNames;
    }

    public void setAttachmentNames(List<String> attachmentNames) {
        this.attachmentNames = attachmentNames;
    }



}
4、创建SendMailBySSL类,用于发送Email。
package com.lumitest.util;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class SendMailBySSL {

    private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

    /**
     * 正式发邮件
     **/
    public boolean sendMail(Email email) {
        Properties properties = new Properties();
        properties.put("mail.smtp.host", email.getSmtpServer());
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.socketFactory.class", SSL_FACTORY); // 使用JSSE的SSL
        properties.put("mail.smtp.socketFactory.fallback", "false"); // 只处理SSL的连接,对于非SSL的连接不做处理
        properties.put("mail.smtp.port", email.getPort());
        properties.put("mail.smtp.socketFactory.port", email.getPort());

        Session session = Session.getInstance(properties);
        //session.setDebug(true);   //调试模式
        MimeMessage message = new MimeMessage(session);

        try {
            // 发件人
            Address address = new InternetAddress(email.getUsername());
            message.setFrom(address);
            // 收件人
            for (String recipient : email.getRecipients()) {
                Address toAddress = new InternetAddress(recipient);
                // 设置收件人,并设置其接收类型为TO,TO:代表有健的主要接收者。 CC:代表有健的抄送接收者。 BCC:代表邮件的暗送接收者。
                message.setRecipient(MimeMessage.RecipientType.TO, toAddress);
            }
            // 主题
            message.setSubject(email.getSubject());
            // 时间
            message.setSentDate(new Date());
            Multipart multipart = new MimeMultipart();
            // 添加文本
            BodyPart text = new MimeBodyPart();
            text.setText(email.getContent());
            multipart.addBodyPart(text);
            // 添加附件
            if(email.getAttachmentNames() != null){
                for (String fileName : email.getAttachmentNames()) {
                    BodyPart adjunct = new MimeBodyPart();
                    FileDataSource fileDataSource = new FileDataSource(fileName);
                    adjunct.setDataHandler(new DataHandler(fileDataSource));
                    adjunct.setFileName( MimeUtility.encodeText((fileDataSource.getName())));
                    multipart.addBodyPart(adjunct);
                }
                // 清空收件人集合,附件集合
                email.getRecipients().clear();
                email.getAttachmentNames().clear();
            }
            message.setContent(multipart);
            message.saveChanges();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        try {
            Transport transport = session.getTransport("smtp");
            transport.connect(email.getSmtpServer(), email.getUsername(), email.getPassword());
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
5、创建Servlet命名为SendMailServlet,url为SendMailServlet。也可以在main方法中调用。
package com.lumitest.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.lumitest.util.Email;
import com.lumitest.util.SendMailBySSL;

/**
 * 发送邮件的请求servlet
 * 
 * @author 梦幻逝水
 *
 */
public class SendMailServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //收件人
        List<String> recipients = new ArrayList<String>();
        recipients.add("123456789@qq.com");
        //主题
        String subject = "这封邮件是为了测试SMTP的SSL加密传输";
        //内容
        String content = "这是这封邮件的正文";
        //附件
        List<String> attachmentNames = new ArrayList<String>();
        attachmentNames.add("D://测试test.txt");

        Email email = new Email("smtp.qq.com", "465","12356789@qq.com", "授权码", recipients, subject, content, attachmentNames);
        new SendMailBySSL().sendMail(email);
    }

}
6、效果展现

效果展现

Demo源代码下载:https://www.yangjiace.xyz/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值