1. 程式人生 > >javax.mail 報錯 501 mail from address must be same as authorization user 解決方法

javax.mail 報錯 501 mail from address must be same as authorization user 解決方法

從一個郵箱傳送郵件

從一個郵箱傳送郵件報錯 501 mail from address must be same as authorization user,是由於獲取Session時的賬號和Message中設定的郵箱地址setFrom不一致引起的
程式碼如下:

/**
 * 伺服器郵箱登入驗證
 */
class MailAuthenticator extends Authenticator {
    private String user;
    private String pwd;

    public MailAuthenticator(String user, String pwd) {
        this
.user = user; this.pwd = pwd; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, pwd); } } public void sendMail() { String to = "[email protected]";// 收信郵箱 String subject = "javaMail測試傳送"
;// 郵件主題 String text = "測試郵件";// 郵件內容 _LOG.debug("傳送郵箱伺服器配置資訊載入..."); Properties properties = new Properties();// 建立Properties物件 //方法一:手動新增配置資訊 // properties.setProperty("mail.transport.protocol", "smtp");// 設定傳輸協議 // properties.put("mail.smtp.host", "smtp.qq.com");// 設定發信郵箱的smtp地址
// properties.setProperty("mail.smtp.auth", "true"); // 驗證 // String from = "[email protected]";// 發信郵箱 // Authenticator auth = new MailAuthenticator(from, "11111111"); // 使用驗證,建立一個Authenticator //方法二:讀取配置檔案 String propertiesFilePath = "conf/jmail.properties"; try { InputStream in = JavaMailSenderDemo.class.getClassLoader().getResourceAsStream(propertiesFilePath); properties.load(in);//讀取配置資訊 in.close(); } catch (IOException e1) { _LOG.error("路徑:"+propertiesFilePath+"讀取失敗!", e1); } String from = properties.getProperty("mail.userName");// 發信郵箱 Authenticator auth = new MailAuthenticator(from, properties.getProperty("mail.password")); // 使用驗證,建立一個Authenticator _LOG.debug("傳送郵箱伺服器配置資訊載入完畢,建立session註冊配置"); Session session = Session.getDefaultInstance(properties, auth);// 根據Properties,Authenticator建立Session try { Message message = new MimeMessage(session);// Message儲存傳送的電子郵件資訊 message.setFrom(new InternetAddress(from)); message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));// 設定收信郵箱 message.setSubject(subject);// 設定主題 message.setText(text);// 設定內容 Transport.send(message);// 傳送 _LOG.debug("傳送完畢!"); } catch (MessagingException e) { e.printStackTrace(); } }

如果 new MailAuthenticator(userName, password);
message.setFrom(new InternetAddress(fromAddress));
userNamefromAddress不一致將會報出
501 mail from address must be same as authorization user的錯誤

從多個郵箱傳送郵件

現在要在一個程序中同時由多個郵箱傳送郵件。此事不但要注意上面描述的情況外,還要注意一點,在同一個程序中Session.getDefaultInstance得到的是一個單例的Session物件,就是第一次getDefaultInstance得到的Session物件。看Session物件中原始碼就一目瞭然

// The default session.
private static Session defaultSession = null;

public static synchronized Session getDefaultInstance(Properties props,
                Authenticator authenticator) {
    if (defaultSession == null)
        defaultSession = new Session(props, authenticator);
    else {
        // have to check whether caller is allowed to see default session
        if (defaultSession.authenticator == authenticator)
        ;   // either same object or both null, either way OK
        else if (defaultSession.authenticator != null &&
            authenticator != null &&
            defaultSession.authenticator.getClass().getClassLoader() ==
            authenticator.getClass().getClassLoader())
        ;   // both objects came from the same class loader, OK
        else
        // anything else is not allowed
        throw new SecurityException("Access to default session denied");
    }

    return defaultSession;
}

也就是說程式中我們要切換髮送方的郵箱賬戶,我們就不能用Session.getDefaultInstance獲取Session,我們必須用Session.getInstance,使我們每次切換賬戶得到的都是一個新的Session物件。

相關推薦

javax.mail 501 mail from address must be same as authorization user 解決方法

從一個郵箱傳送郵件 從一個郵箱傳送郵件報錯 501 mail from address must be same as authorization user,是由於獲取Session時的賬號和Message中設定的郵箱地址setFrom不一致引起的 程式碼如

redmide 配置郵箱 出錯記錄501 mail from address must be same as authorization user

redmine  》配置 》郵件通知 》郵件發件人地址,跟配置檔案的傳送郵箱要統一。 production: delivery_method: :smtp smtp_settings: ssl: true address: "sm

C#使用QQ郵箱發送,出現mail from address must be same as authorization user異常

第三方 smt log .cn user alt from 登錄密碼 mtp 1.未開啟pop3或者smtp 2.在使用第三方客戶端時,郵箱登錄密碼不是“登錄密碼”,應該是生成的授權碼。 如圖: C#使用QQ郵箱發送,出現mail from address must b

MyBatis多個接口參數:Available parameters are [0, 1, param1, param2], 及解決方法

pan 解決 而且 crm ger int mybatis 添加 為什麽 1. sql語句如下:  SELECT * FROM tb_crm_user WHERE id = #{userId, jdbcType=INTEGER} AND

mac下python環境pip[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 的解決方法

install oot cert get ping trap rmi ssl cert macbook 1.mac下python環境pip報錯: issuserdeMacBook-Pro:~ issuser$ pip install pyinstallerCollecti

Https協議:com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnectionOldImpl解決方法

toc 使用 地址 bae aaaaa line 點擊 pro details 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://blog.csdn.net/xuri24/article/details/82220333 所用應用服務器:JBos

git:Pull is not possible because you have unmerged files解決方法

git pull 的時候報如下錯誤程式碼: error: Pulling is not possible because you have unmerged files. 嘗試用git stash沒有作用。 Pull is not possible because you have

關於ASP.NET 伺服器 Server Error in '/' Application Runtime Error 錯誤及解決方法

今天遇到一個錯誤 程式在伺服器上執行時報錯 先貼上錯誤程式碼 自己也在網上找了一些解決方法,把錯誤定位到伺服器的配置檔案也就是Web.config的問題, 於是在system.web節點下 加上customErrors mode="Off" 這個節點 可是問題並沒有解決 在此也說一下 找錯誤的時候一

python:TypeError: slice indices must be integers or None or have an __index__ method

宣告:本文為博主原創文章,不可轉載 https://blog.csdn.net/jjddss/article/details/73469104 在使用Python進行矩陣操作時,當內部含有除法時,會產生錯誤: TypeError: slice indices must be integers

python合併矩陣all the input arrays must have same....和vstack() takes 1 positional arrays....

python中使用numpy合併矩陣a,b 報錯 密集(dense)矩陣的合併不報錯,然而稀疏矩陣(sparse)報錯了,即在矩陣中,多數的元素為0。 ValueError: all the input arrays must have same number of

linux系統啟動:[contains a file system with errors, check forced]的解決方法參考【ZT】

https://blog.csdn.net/BabyFish13/article/details/51190148   1、解決參考一 Press enter for maintenance (or type Control-D to continue): /dev/sda3 co

nginx 啟動“var/run/nginx/nginx.pid" no such file or directory解決方法

        今天剛搭建的nginx伺服器啟動時,報錯“var/run/nginx/nginx.pid" no such file or directory,按照他的意思我在var/run/新建了一個資料夾nginx,重新啟動,啟動成功。 但是當我虛擬機器重啟後依然報錯“

python 之:TypeError: write() argument must be str, not bytes

在用 pickle.dump() 儲存二進位制檔案時,一直報錯,程式如下: with open(os.path.join(FLAGS.train_data_dir, 'files.log'), 'w') as f: pickle.dump([training_paths, testing_

faster rcnn:TypeError: slice indices must be integers or None or have an __index__ method

https://blog.csdn.net/qq_27637315/article/details/78849756 faster rcnn報錯:TypeError: slice indices must be integers or None or have an __index__ method

echart在ios部分機型null is not object(evaluating 'ctx.save')問題解決方法

觸發背景:    在使用wex5平臺開發和使用xcode打包後的app上點選返回鍵再進去載入echart圖反覆3次左右必現 報錯如圖   解決方法: 多次檢查後,定位為退出頁面後沒有銷燬原物件,再次進入渲染導致的問題 在程式碼裡面加上離

本地開發Spark,執行JavaSparkPi例子:A master URL must be set in your configuration

錯誤資訊: Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 18/08/21 18:39:27 INFO SparkContext: Running Spark versi

Java程式:“找不到或無法載入主類”的解決方法

執行很簡單的java程式,就是在命令列中執行java HelloWorld,結果報錯:“找不到或無法載入主類”,通過上網查詢資料,有些資料上說是CLASSPATH值設定的有問題,最前面要有一個點才行,結

Nginx:nginx: [error] invalid PID number "" in "/run/nginx.pid" 解決方法

伺服器重啟之後,執行 nginx -t 是OK的,然而在執行 nginx -s reload 的時候報錯nginx: [error] invalid PID number "" in "/run/nginx.pid"解決方法:需要先執行nginx -c /etc/nginx/

關於WIN10 edge瀏覽器 找不到DNS地址 錯誤程式碼:INET_E_RESOURCE_NOT_FOUND 的解決方法

一直使用WIN10自帶的edge瀏覽器,感覺習慣了挺好用的,突然這兩天變得特別慢,然後直接網頁都刷不開了,在網上找了很久原因,沒有一個比較好的解決辦法,無意間在一次網頁沒刷開的時候注意到網頁下面的錯誤報告,查過之後才知道原因出在哪裡。借鑑系統之家的一篇教程:http://mi

支付寶“暫時無法獲取訂單資訊,請稍後再試”解決方法

這個問題在網上找到好多,說法五花八門,單沒有一個方法解決。最後一行一行的測試發現,原來這個錯誤的真正原因是。 total_amount付款金額不能是0! total_amount付款金額不能是0! total_amount付款金額不能是0!