zoukankan      html  css  js  c++  java
  • JavaMail简单版实验测试

    前言:

      最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理。现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试!

    1.载入相关jar包

      客户端传输邮件需要用的jar包:activation.jar和mail.jar

      (下载:https://github.com/SeaSky0606/share)

    2.JavaMail代码实现

     1 package com.seasky.mail;
     2 
     3 import java.util.Properties;
     4 
     5 import javax.mail.Address;
     6 import javax.mail.Message;
     7 import javax.mail.MessagingException;
     8 import javax.mail.Session;
     9 import javax.mail.Transport;
    10 import javax.mail.internet.InternetAddress;
    11 import javax.mail.internet.MimeMessage;
    12 
    13 public class Mail {
    14 
    15     /**
    16      * @param args
    17      */
    18     public static void main(String[] args) {
    19 
    20         //属性设置,创建会话
    21         Properties properties = new Properties();
    22         properties.setProperty("mail.transport.protocol", "smtp");
    23         Session session = Session.getInstance(properties);
    24         session.setDebug(true);        //设置debug模式
    25         //创建Message对象
    26         Message message = new MimeMessage(session);
    27         try {
    28             message.setSubject("我是主题");
    29             message.setFrom(new InternetAddress("soft03_test@sina.com"));
    30             message.setContent("<h2>我是内容</h2>", "text/html;charset=utf-8");
    31             
    32             //创建接口,并连接(登录)
    33             Transport transport = session.getTransport();
    34             transport.connect("smtp.sina.com", "soft03_test", "soft03_test");
    35             //发送邮件
    36             transport.sendMessage(message, new Address[]{new InternetAddress("123456789@qq.com"),
    37                     new InternetAddress("soft03_test@sina.com")});
    38         } catch (MessagingException e) {
    39             e.printStackTrace();
    40         }finally{
    41             System.out.println("---finish--");
    42         }
    43         
    44     }
    45 
    46 }

    登录测试邮箱查看:

    3.Debug模式下打印出smtp连接建立的过程

    DEBUG: setDebug: JavaMail version 1.4.1
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth false
    DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
    220 smtp-2-33.smtpsmail.fmail.yf.sinanode.com ESMTP
    DEBUG SMTP: connected to host "smtp.sina.com", port: 25
    
    EHLO CJH
    250-smtp-2-33.smtpsmail.fmail.yf.sinanode.com
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250-STARTTLS
    250 8BITMIME
    DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
    DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
    DEBUG SMTP: Found extension "STARTTLS", arg ""
    DEBUG SMTP: Found extension "8BITMIME", arg ""
    DEBUG SMTP: Attempt to authenticate
    AUTH LOGIN
    334 VXNlcm5hbWU6
    c29mdDAzX3Rlc3Q=
    334 UGFzc3dvcmQ6
    c29mdDAzX3Rlc3Q=
    235 OK Authenticated
    DEBUG SMTP: use8bit false
    MAIL FROM:<soft03_test@sina.com>
    250 ok
    RCPT TO:<123456789@qq.com>
    250 ok
    RCPT TO:<soft03_test@sina.com>
    250 ok
    DEBUG SMTP: Verified Addresses
    DEBUG SMTP:   123456789@qq.com
    DEBUG SMTP:   soft03_test@sina.com
    DATA
    354 End data with <CR><LF>.<CR><LF>
    From: soft03_test@sina.com
    Message-ID: <535071474.0.1446284102239.JavaMail.Administrator@CJH>
    Subject: =?UTF-8?B?5oiR5piv5Li76aKY?=
    MIME-Version: 1.0
    Content-Type: text/html;charset=utf-8
    Content-Transfer-Encoding: base64
    
    PGgyPuaIkeaYr+WGheWuuTwvaDI+
    .
    250 ok queue id 2476333014883
    ---finish--

    4.常见问题:

    1.出现包冲突

    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

      没有找到相关的内部类错误,即说明存在 jar包冲突!

     解决方法:

        去除开发环境的内部javaEE包,或者删除其内部java.mail下面的所有类!

    2.注册的实验邮箱测试失败

    535 5.7.8 authentication failed
    javax.mail.AuthenticationFailedException
    at javax.mail.Service.connect(Service.java:319)
    at javax.mail.Service.connect(Service.java:169)
    at com.seasky.mail.JMailTest.main(JMailTest.java:35)
    ---finish--

      解决方法:

        由于实验测试邮箱可能需要开通vip,所以建议直接使用本样例中的新浪邮箱的账号密码(soft03_test/soft03_test)!

  • 相关阅读:
    冒泡排序与选择排序
    SVN-cheanup反复操作失败的问题。
    js区分汉字和字符,校验长度
    maven的安装与使用
    java获取登陆用户的IP地址
    kafka创建topics 错误: 找不到或无法加载主类 FilesJavajdk1.7.0_80lib;C:Program
    SOAPwebservice 与Restfull webservice之间的区别
    CAD数据导入Arcgis10.1的依赖关系
    wpf之StackPanel、WrapPanel、WrapPanel之间的关系
    浅谈修饰符
  • 原文地址:https://www.cnblogs.com/SeaSky0606/p/4925883.html
Copyright © 2011-2022 走看看