zoukankan      html  css  js  c++  java
  • Java邮件——javaMail使用心得

    想要做一个java发送邮件小功能。

    使用的maven搭建的项目。
    <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
    <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
    </dependency>
    如果要手动引入jar包,则需要引入两个jar包;
    以下是我的代码:
    public class Mail {
    //发送人信息
    public static String myEmailAccount = "。。。。@163.com"; //邮箱
    public static String myEmailPassword = "。。。。。"; //密码

    //发送邮箱信息
    //发送人邮箱的SMTP服务器地址,必须准确,不同邮箱服务器地址一般不同,
    public static String toEmailSMTPHost = "smtp.163.com"; //网易邮箱
    public static String toEmailAccount = "。。。。。@163.com"; //收件人邮箱


    //主函数
    public static void main(String[] args) throws Exception {

    //1.创建参数配置,用于连接邮件服务器
    Properties props = new Properties();
    props.setProperty("mail.transport.protocol","smtp");//声明使用协议
    props.setProperty("mail.smtp.host",toEmailSMTPHost);//确定邮箱的服务器地址
    props.setProperty("mail.smtp.auth","true");//需要请求验证

    /**
    * PS 某些邮箱服务器要求SMTP连接需要使用SSL安全认证,为了提高安全性,邮箱支持
    * SSL连接,也可以自己开启;如果服务器无法连接右键服务器,仔细查看控制台打印的log
    * **/

    /**
    * 下面代码为打开SSL连接的SMTP服务,
    * SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
    * 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
    *

    final String smtpPort = "465";
    props.setProperty("mail.smtp.port",smtpPort);
    props.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
    props.setProperty("mail.smtp.socketFactory.fallback","false");
    props.setProperty("mail.smtp.socketFactory.port",smtpPort);
    **/

    //2.根据配置创建会话对象,用于和邮件服务器交互
    Session session = Session.getDefaultInstance(props);
    session.setDebug(true);

    //3.创建一封邮件
    MimeMessage message = createMimeMessage(session,myEmailAccount,toEmailAccount);

    //4.根据Session 获取邮件传输对象
    Transport transport = session.getTransport();

    /**
    * 5. 使用邮箱账号 和 密码 连接右键服务器,这里认证的邮箱必须与 message 中的发件人邮箱一致,否则报错
    * PS——01:成败的判断关键在此一句,如果连接服务器失败,都会在控制台输出相应失败原因的log
    * 仔细查看失败原因,有些邮箱服务器会返回错误码或者查看错误类型的连接,根据给出的错误类型对应的邮件服务器
    * 的帮助网站上查看具体失败原因
    *
    * PS——02:连接失败的原因通常有几下几点,仔细检查代码:
    * 1.邮箱没有开启SMTP服务
    * 2.邮箱密码错误,例如某些邮箱开启了独立密码;
    * 3.邮箱服务器要求必须要使用SSL安全连接;
    * 4.请求过于频繁或其他原因,被邮件服务器拒绝服务;
    *
    *
    * PS--03:仔细看log,认真看log,看懂log,错误原因都在log已说明。
    *
    */
    transport.connect(myEmailAccount,myEmailPassword);

    //6. 发送邮件,发送所有的收件地址,message.getAllRecipients()获取到的是在创建邮件对象添加的所有收件人,抄送人,密送人
    transport.sendMessage(message,message.getAllRecipients());

    //7. 关闭连接
    transport.close();
    }

    /**
    * 创建一封只包含文本的简单邮件
    * @param session 和服务器交互的会话
    * @param sendMail 发件人邮箱
    * @param toEmailAccount 收件人邮箱
    *
    * **/

    public static MimeMessage createMimeMessage(Session session, String sendMail,
    String toEmailAccount)throws Exception {
    //1.创建一封邮件
    MimeMessage message = new MimeMessage(session);

    //2. From 发件人
    message.setFrom(new InternetAddress(sendMail,"哈哈","UTF-8"));

    //3 To 收件人(可以增加多个收件人,抄送,密送)
    message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(toEmailAccount,
    "美女","UTF-8"));

    //4.Subject:邮件主题
    message.setSubject("来,聊聊天","UTF-8");

    //5. Content: 邮件正文(可以使用html标签)
    message.setContent("何冰玲美女,今晚没下雨哈","text/html;charset=UTF-8");

    // 6.设置发件时间
    message.setSentDate(new Date());

    //7. 保存设置
    message.saveChanges();

    return message;
    }
    }
    期间产生的错误:
    1.错误码550: 

    步骤

    1. 登录自己的163邮箱,注意,要用你的应用程序中设置的邮箱地址去登录。

    2. 在主菜单栏上的“设置”子菜单里面,选择POP3/SMTP/IAMP菜单。

    3. 若没有开启“客户端授权密码”,则选择将其开启。开启后,会给你生成一个应用授权密码。要用这个生成的密码作为java mail API发送邮件的认证密码,如此,才能解除500密码,若用邮箱的登录密码去设置这个认证密码,会遇到500的错误。下图是开启“客户端授权密码”功能后的截图:

     
    设置上面之后会产生535错误代码:原因如下:
    //发送人信息
    public static String myEmailAccount = "。。。。。。; //邮箱
    public static String myEmailPassword = "。。。。。。; //密码
    这里的密码不是你设置的邮箱登陆密码,而是客户端授权密码。
  • 相关阅读:
    使用apache的ab命令进行压测
    mysql插入数据时,去掉重复的数据;
    CI框架的事务开启、提交和回滚
    电脑如何自动玩popstar
    Outsider(HNOI2019)
    洛谷P4689 [Ynoi2016]这是我自己的发明(莫队,树的dfn序,map,容斥原理)
    Ubuntu下编写终端界面交互式C++小程序的一些Trick(小技巧,gnome-terminal)
    贪心相关/模拟网络流、费用流细节梳理/模板(贪心,模拟费用流,栈)
    洛谷P3602 Koishi Loves Segments(贪心,multiset)
    洛谷CF809C Find a car(数位DP)
  • 原文地址:https://www.cnblogs.com/zuiyue_jing/p/7482791.html
Copyright © 2011-2022 走看看