美文网首页
Java中发送邮件

Java中发送邮件

作者: huoyl0410 | 来源:发表于2018-03-29 11:45 被阅读0次

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

    1. 电子邮件协议

    电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

    2. JavaMail

    我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载,这里我从 JavaEE 官方的 Github 仓库下载。

    JavaMail 下载地址:https://github.com/javaee/javamail/releases

    特别注意:

    本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用JavaMail 1.6.0版本再进行尝试。

    使用JavaMail 1.6.0要求的 JDK 版本必须是JDK 1.7 以上(建议使用最新版 JDK)。

    不要直接就完完全全复制我的代码,需要修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送,内容一致,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

    package com.companyserver.service.impl;

    @Service

    public class EmailServiceImpl implements EmailService {

    @Value("${mail.username}")

    private StringMAIL_USERNAME;

    @Value("${mail.from}")

    private StringMAIL_FROM;

    @Value("${mail.password}")

    private StringMAIL_PASSWORD;

    @Value("${mail.host}")

    private StringMAIL_HOST;

    @Value("${mail.port}")

    private StringMAIL_PORT;

    //设置配置条件

    private Properties generateProperties() {

         Properties properties = System.getProperties();//系统配置

          properties.put("mail.smtp.host",MAIL_HOST);//邮件服务器

           properties.put("mail.smtp.port",MAIL_PORT);//邮件服务器端口

           properties.put("mail.smtp.auth","true");

            properties.put("mail.transport.protocol","smtp");//发送方式

             return properties;

       }

    private Session getSession() {

    Properties props =this.generateProperties();

    Session session = Session.getInstance(props, new javax.mail.Authenticator() {

          protected PasswordAuthentication getPasswordAuthentication() {

                  return new PasswordAuthentication(MAIL_USERNAME, MAIL_PASSWORD);

              }

         });

         return session;

       }

    //发送网页消息

    @Override

    public voidsendHtml(String to,String subject,String body)throwsMessagingException {

    Session session = getSession();

    Message message =newMimeMessage(session);

    message.setFrom(newInternetAddress(MAIL_FROM));

    message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

    message.setSentDate(newDate());//设置邮件消息发送的时间

    message.setSubject(subject);//设置邮件发送的端口

    //发送简单的文本消息可以这样

    //message.setText(body);

    //Transport.send(message);

    //MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象

    Multipart mainPart =newMimeMultipart();

    MimeBodyPart messageBodyPart =newMimeBodyPart();//创建一个包含附件内容的MimeBodyPart

    //设置HTML内容

    messageBodyPart.setContent(body,"text/html; charset=utf-8");

    mainPart.addBodyPart(messageBodyPart);

    message.setContent(mainPart);

    Transport.send(message);

        }

    @Override

    public voidsendMessage(String to,String subject,String body)throwsMessagingException{

    Session session = getSession();

    Message message =newMimeMessage(session);

    message.setFrom(newInternetAddress(MAIL_FROM));

    message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

    message.setSentDate(newDate());//设置邮件消息发送的时间

    message.setSubject(subject);

    message.setText(body);

    Transport.send(message);

         }

    }

    作者:谁在烽烟彼岸

    链接:https://www.jianshu.com/p/79e7e1fb6712

    來源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:Java中发送邮件

          本文链接:https://www.haomeiwen.com/subject/axrmcftx.html