約アリクラウドサーバへのローカルからWebプロジェクトを展開し、メールを送信するために、バグSTMPプロトコルを使用することはできません

私は、問題とその解決策を説明しました

最近、電子メール機能を送信するためにjavaweb便利なアイテムを書いて、それが自然STMPプロトコルを使用してと思うだろう、Javaはローカルでもこんなに早く成功した試運転、対応するjarファイルのパッケージを持っていますが、アリは、クラウドサーバ(私はubuntu16.04た)上に展開しました常に与えられています:

javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 25;

そのアリクラウドサーバー後Baiduは25ポート開いていない、転送メールにSSL暗号化プロトコルを使用して、465(STMPSプロトコル)ポート25にポートを変更する(STMPプロトコル)に必要です。

:STMPSのBaiduの百科事典として、以下に定義
SMTPS:SSLセキュリティプロトコル上プロトコルSMTPプロトコルの変形に基づいているSMTPS(SMTPオーバーSSL)プロトコルのオープンサービスのための465のポートは、それがSSLセキュリティプロトコルを継承します非対称暗号化は、電子メールの開示を防止するため、安全性の高い信頼性です。SMTPSおよびSMTPプロトコルでなく、メッセージを送信するが、より安全で、漏れて、だけでなく、メール送信者の否認防止機能を実現するハッカーによって傍受されることからメッセージを防止します。後に削除て送信メッセージを送信、送信者を防ぐため、そのようなAメッセージの拒否を送りました。

問題が見つかったので、我々は次のように特定のコードの構成を変更した後、今の問題を解決するために始めます。

//设置SSL加密方式
MailSSLSocketFactory sf=new MailSSLSocketFactory();
sf.setTrustAllHosts(true);

//获取系统属性
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
properties.put("mail.smtp.port", "465");//使用465端口号
properties.put("mail.smtp.auth", "true");//开启认证
properties.put("mail.smtp.ssl.enable", "true");//启用ssl安全协议
properties.put("mail.smtp.ssl.socketFactory", sf);//设置ssl配置
properties.put("mail.debug", "true");// 显示debug信息

その後、問題が発生した私であるのmail.jarを行うために袋なしMailSSLSocketFactoryはこのクラス、2年前にこのjarパッケージを考えると、ゲームをダウンロードし、それはあまりにも古いバージョンであってもよいし、githubのジャーに最終の最新バージョンをダウンロードしていますパッケージには、あなたは正確にメッセージを送ることができます。ジャーパッケージリンクの最新バージョン:
JavaMailののgithubのアドレス

完全なコード

/**
* @author Author:lhy
* @version created on :2019年12月18日 下午8:43:35
*/
package utils;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

import com.sun.mail.util.MailSSLSocketFactory;
 
public class EmailUtil {
	 
		private static String from = "[email protected]"; // 发件人邮箱地址
		private static String user = "咕咕单车"; // 发件人称号
		private static String password = "你的stmp授权码"; // 发件人邮箱客户端授权码,不是邮箱密码!!!
		
		/* 发送邮件 */
		public static boolean sendMail(String to, String text, String title) {
			try { 
					MailSSLSocketFactory sf=new MailSSLSocketFactory();
					sf.setTrustAllHosts(true);
					
					//获取系统属性
				  	Properties properties = new Properties();
			        
				  	properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
				  	properties.put("mail.smtp.port", "465");//使用465端口号
				  	properties.put("mail.smtp.auth", "true");//开启认证
				  	properties.put("mail.smtp.ssl.enable", "true");//允许使用ssl加密传输
				  	properties.put("mail.smtp.ssl.socketFactory", sf);
				  	properties.put("mail.debug", "true");// 显示debug信息
				  	
			        // 得到会话对象
			        Session session = Session.getInstance(properties);
			        // 获取邮件对象
			        Message message = new MimeMessage(session);
			        // 设置发件人邮箱地址
			        message.setFrom(new InternetAddress(from));
			        // 设置收件人邮箱地址,一次向多个邮箱发送
			        //message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("[email protected]"),new InternetAddress("[email protected]"),new InternetAddress("[email protected]")});
			        // 设置收件人邮箱地址,一次向一个邮箱发送
			        message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//一个收件人
			        // 设置邮件标题
			        message.setSubject(title);
			        // 设置邮件内容
			        message.setText(text);
			        // 得到邮差对象
			        Transport transport = session.getTransport();
			        // 连接自己的邮箱账户
			        transport.connect(from, password);// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
			        // 发送邮件
			        transport.sendMessage(message, message.getAllRecipients());
			        // 关闭资源
			        transport.close();
			        return true;
			}catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
				return false;
			}
		}
	 
		public static void main(String[] args) { // 做测试用
			sendMail("[email protected]", "机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组", "什么是机器学习?");
		}
}
公開された61元の記事 ウォン称賛16 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_41427568/article/details/103753323