邮件发送的实现

丶灬走出姿态 提交于 2019-12-28 04:33:38

一、了解邮件发送的流程

 如上图,假如用户A使用QQ邮箱向163邮箱的使用者用户B发送邮件。用户A登录邮件客户端软件,填写收件人,主题和正文,邮件服务器按照SMTP协议将用户填写的内容进行数据格式化处理,再通过邮件服务器通过互联网发送到用户B的邮件服务器。

用户B的邮件服务器接收到了用户A发送的邮件后会把该邮件依据SMTP协议将从互联网接收的邮件进行处理然后保存在用户B的163邮件内部存储空间,用户登录邮箱客户端后会从该163邮件内部存储空间中依照POP3协议读取存在服务器中的邮件。

其中SMTP协议使用的端口号为25,POP3使用的端口号为110.

二、实现邮件发送使用到的工具类

Java如果实现邮件发送首先要导入能实现邮件发送的jar包,SUN公司提供了javaMail的jar包。

Maven中的坐标如下

         <!-- Javamail -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.4</version>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.9</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>

 

添加实现邮件发送有好多工具类,下方是一个工具类MailUtil工具类,只需修改一些参数就可以直接使用。直接把该工具类放在Utils包下调用即可

import javax.mail.Address;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class MailUtil {
public static final String HOST="smtp.163.com";//"smtp.sina.com","smtp.qq.com",发送者使用的邮件服务器主机地址public static final String USER="";//发送者的邮箱用户名public static final String PASSWORD="";//发送者的邮箱密码
    /**
     * 实现邮件发送的方法
     * @param to  收件人地址
     * @param subject  主题
     * @param content  内容
     * @throws Exception
     */
    public static void sendMsg(String to ,String subject ,String content) throws Exception{
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", HOST);  //设置主机地址   smtp.qq.com    smtp.sina.com

        props.setProperty("mail.smtp.auth", "true");//认证

        //2.根据以上参数产生一个相对应的用于邮件发送的Session对象
        Session session = Session.getInstance(props);

        //3.产生一个邮件的消息对象
        MimeMessage message = new MimeMessage(session);

        //4.设置消息的发送者
        Address fromAddr = new InternetAddress(USER);
        message.setFrom(fromAddr);

        //5.设置消息的接收者
        Address toAddr = new InternetAddress(to);
        //TO 直接发送  CC抄送    BCC密送
        message.setRecipient(MimeMessage.RecipientType.TO, toAddr);

        //6.设置主题
        message.setSubject(subject);
        //7.设置正文
        message.setText(content);

        //8.准备发送,得到发送器
        Transport transport = session.getTransport("smtp");
        //9.建立发送器与发送服务器之间的连接,三个参数分别为发送者服务器的主机,发送者的邮箱,发送邮箱对应的密码
        transport.connect(HOST, USER, PASSWORD);
        //10.发送邮件
        transport.sendMessage(message, message.getAllRecipients());

        //11.关闭
        transport.close();
    }

}

 三、测试

通过Junit进行测试如下

 

public class mailtesst {
    @Test
    public void test() throws Exception {
        MailUtil.sendMsg("目标邮箱@163.com","重要文件","验证码是1324");
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!