<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    lqxue

    常用鏈接

    統計

    book

    tools

    最新評論

    [收藏] 使用javamail發信過程中的一些問題及解決方法

      1 今天在研究javamail發信的過程中,出現了一些小問題,現總結如下,以免后來者走些不必要的彎路,先把完整的能夠正常運行的代碼示例粘貼如下:
      2 發郵件源代碼:
      3 package com.hyq.test;
      4 
      5 import java.util.Properties;
      6 import javax.mail.*;
      7 import javax.mail.internet.*;
      8 
      9 public class MailExample {
     10 
     11   public static void main (String args[]) throws Exception {
     12     
     13     String host = "smtp.163.com";   //發件人使用發郵件的電子信箱服務器
     14     String from = "你自己的電子信箱";    //發郵件的出發地(發件人的信箱)
     15     String to = "收件人信箱";   //發郵件的目的地(收件人信箱)
     16 
     17     // Get system properties
     18     Properties props = System.getProperties();
     19 
     20     // Setup mail server
     21     props.put("mail.smtp.host", host);
     22 
     23     // Get session
     24     props.put("mail.smtp.auth""true"); //這樣才能通過驗證
     25 
     26     MyAuthenticator myauth = new MyAuthenticator("你自己的電子信箱""你自己的信箱密碼");
     27     Session session = Session.getDefaultInstance(props, myauth);
     28 
     29 //    session.setDebug(true);
     30 
     31     // Define message
     32     MimeMessage message = new MimeMessage(session);
     33     
     34 
     35     // Set the from address
     36     message.setFrom(new InternetAddress(from));
     37 
     38     // Set the to address
     39     message.addRecipient(Message.RecipientType.TO,
     40       new InternetAddress(to));
     41 
     42     // Set the subject
     43     message.setSubject("測試程序!");
     44 
     45     // Set the content
     46     message.setText("這是用java寫的發送電子郵件的測試程序!");
     47 
     48     message.saveChanges();
     49 
     50       Transport.send(message);
     51     
     52   }
     53 }
     54 
     55 校驗發信人權限的方法
     56 package com.hyq.test;
     57 
     58 import javax.mail.PasswordAuthentication;
     59 
     60 class MyAuthenticator
     61       extends javax.mail.Authenticator {
     62     private String strUser;
     63     private String strPwd;
     64     public MyAuthenticator(String user, String password) {
     65       this.strUser = user;
     66       this.strPwd = password;
     67     }
     68 
     69     protected PasswordAuthentication getPasswordAuthentication() {
     70       return new PasswordAuthentication(strUser, strPwd);
     71     }
     72   }
     73 
     74 
     75 注意:上面的事例僅為使用163信箱時發送電子郵件的方法,因為使用的host為:smtp.163.com,如源代碼中:String host =  "smtp.163.com";   //發件人使用發郵件的電子信箱服務器,如果使用其它的電子郵件發送,就必須在其郵件服務器上查找相應的電子郵件服務器,例如搜狐就要使用smtp.sohu.com,具體情況具體對待,都可以從所使用的郵件服務器上獲得的。如果沒有使用host ,也就是說,沒有進行props.put("mail.smtp.host", host);設置,那么就會拋 javax.mail.MessagingException: Could not connect to SMTP host: localhost,  port: 25;的異常。當然了,如果你沒有正確配置,這個異常仍然會被拋出的。
     76 
     77 有些郵件服務系統是不需要驗證發件人的授權的,所以可以很簡單的使用
     78     Session session = Session.getDefaultInstance(props, null);
     79              而不必使用
     80     props.put("mail.smtp.auth""true"); 
     81     MyAuthenticator myauth = new MyAuthenticator("你自己的電子信箱""你自己的信箱密碼");
     82     Session session = Session.getDefaultInstance(props, myauth);
     83 
     84 就可以發送電子郵件了,這個多為一些企事業單位的內部電子信箱系統。
     85 但是對于很多門戶網站上的電郵系統,如:163,sohu,yahoo等等,如果仍然簡單的這樣使用就會拋
     86 
     87 com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxuAyCAfmnZE8BwtIA==.32705S2
     88 
     89 
     90  at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
     91 
     92  at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
     93 
     94  at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
     95 
     96  at javax.mail.Transport.send0(Transport.java:169)
     97 
     98  at javax.mail.Transport.send(Transport.java:98)
     99 
    100 這樣的異常,要求你必須進行授權校驗,它的目的就是阻止他人任意亂發郵件,也算是為了減少垃圾郵件的出現吧。這時候,我們就要使用
    101     props.put("mail.smtp.auth""true"); 
    102     MyAuthenticator myauth = new MyAuthenticator("你自己的電子信箱""你自己的信箱密碼");
    103     Session session = Session.getDefaultInstance(props, myauth);
    104 
    105 這里還有一個特別注意的事情:在你使用Session.getDefaultInstance時,一定要將    props.put ("mail.smtp.auth""true"); 置為true,它默認的是false,如果你沒有做這一步,雖然你使用了 Session.getDefaultInstance(props, myauth);,你自己也確實     MyAuthenticator myauth = new MyAuthenticator("你自己的電子信箱""你自己的信箱密碼 ");但是它仍然會拋出
    106 com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp8,wKjADxJA2SBrm3ZEFv0gIA==.40815S2
    107 
    108 
    109  at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
    110 
    111  at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
    112 
    113  at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
    114 
    115  at javax.mail.Transport.send0(Transport.java:169)
    116 
    117  at javax.mail.Transport.send(Transport.java:98)
    118 這樣的異常。我就在這一步費了好長時間,后來才發現了這個問題,很是郁悶。不過還好,總算解決了。
    119 
    120 其實上面的做法只是比較簡單的一種,也有很多其它的寫法,如:
    121 Properties props = System.getProperties();可以使用
    122 Properties props = new Properties();來代替。
    123 
    124 
    125 Transport.send(message);可以使用下面的代碼來代替
    126       String username = "你的電子信箱用戶名";
    127       String password = "你的電子信箱密碼";
    128       message.saveChanges(); //    implicit with send()
    129       Transport transport = session.getTransport("smtp");
    130       transport.connect("mail.htf.com.cn", username, password);
    131       transport.sendMessage(message, message.getAllRecipients());
    132       transport.close();
    133 這種方法在同時發送多封電子郵件時比較有用。
    134 
    135 還有一些具體的相關概念,可以查看相關的官方文檔,在我查詢資料時,發現了一篇文章寫得相當仔細,可以加以參考:http://www.matrix.org.cn/resource/article/44/44101_JavaMail.html
    136 
    137 另附上使用org.apache.commons.mail進行發電子郵件的示例:
    138 import org.apache.commons.mail.SimpleEmail;
    139 import org.apache.commons.mail.*;
    140 
    141 public class TestCommon {
    142   public TestCommon() {
    143   }
    144   public static void main(String[] args){
    145     SimpleEmail email = new SimpleEmail();
    146     email.setHostName("smtp.163.com");//設置使用發電子郵件的郵件服務器
    147     try {
    148       email.addTo("收件人信箱");
    149       email.setAuthentication("發件人信箱","發件人信箱密碼");
    150       email.setFrom("發件人信箱");
    151       email.setSubject("Test apache.commons.mail message");
    152       email.setMsg("This is a simple test of commons-email");
    153       email.send();
    154     }
    155     catch (EmailException ex) {
    156       ex.printStackTrace();
    157     }
    158   }
    159 
    注:文章來自http://garyea.javaeye.com/blog/76460

    posted on 2007-05-30 11:45 lqx 閱讀(225) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲人成人无码网www电影首页| 日本黄页网址在线看免费不卡| 国产成人亚洲精品影院| 我的小后妈韩剧在线看免费高清版| 五级黄18以上免费看| 亚洲熟伦熟女专区hd高清| 久久久久亚洲精品成人网小说 | 中文字幕亚洲天堂| 成人免费777777| 免费观看无遮挡www的小视频| 三上悠亚电影全集免费| 野花视频在线官网免费1| 亚洲欧美日韩一区二区三区在线| 亚洲酒色1314狠狠做| 亚洲国产精品无码专区影院| 亚洲国产精品视频| 免费欧洲美女牲交视频| 女人18特级一级毛片免费视频| 中文字幕乱码免费视频| 88xx成人永久免费观看| 久久精品免费观看| 野花香高清在线观看视频播放免费| eeuss影院ss奇兵免费com| 国产亚洲精品国产福利在线观看| 亚洲精品无码久久久久牙蜜区| 亚洲色偷偷综合亚洲AV伊人蜜桃| 亚洲乱码中文论理电影| 亚洲性69影院在线观看| 亚洲日本在线观看网址| 亚洲国产精品乱码在线观看97| 亚洲视频小说图片| 亚洲免费视频播放| 亚洲a∨无码男人的天堂| 亚洲情A成黄在线观看动漫软件 | 三年片在线观看免费观看大全动漫| 中国国语毛片免费观看视频| 精品一区二区三区高清免费观看| 国产特黄一级一片免费| 拍拍拍无挡视频免费观看1000| 免费国产叼嘿视频大全网站| 91青青青国产在观免费影视|