ディレクトリ
私は、問題とその解決策を説明しました
最近、電子メール機能を送信するために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]", "机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组", "什么是机器学习?");
}
}