ホームページ  >  記事  >  Java  >  Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。

Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。

高洛峰
高洛峰オリジナル
2017-01-16 09:49:471848ブラウズ

最近、ニュース クローラー プロジェクトに取り組んでおり、この機能を実装したいと考えています。ページのクロールが失敗した後、このページの URL をメールに送信します。最終的なレンダリングは次のとおりです。フィルター ラベル、障害ステータス コードなどを後で追加して、例外の分類と検索を容易にすることができます。

Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。

開発者は、メール内の URL とスタック情報に基づいて、クローラーの失敗の理由を分析できます。

サーバーがダウンしていますか?

それとも、クローラーの Dom 解析がコンテンツを解析しないのでしょうか?

SMTP サービスをオンにしてください

で SMTP サービスをオンにしてください。 QQ メールボックスの [設定] -> [アカウント]

QQ メールボックスを開いた後、コード内のメールボックスに接続するには、この認証コードを使用して元のメールボックスのパスワードを使用しないようにしてください。プレーンテキストのパスワード。 Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。

この記事 Java Mail (2): JavaMail の概要と簡単な電子メールを送信するためのサンプル コードを基にオンラインで例を確認しました Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。

Properties props = new Properties();
 
// 开启debug调试
props.setProperty("mail.debug", "true");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
 
Session session = Session.getInstance(props);
 
//邮件内容部分
Message msg = new MimeMessage(session);
msg.setSubject("seenews 错误");
StringBuilder builder = new StringBuilder();
builder.append("url = " + "http://blog.csdn.net/never_cxb/article/details/50524571");
builder.append("页面爬虫错误");
builder.append("\n data " + TimeTool.getCurrentTime());
msg.setText(builder.toString());
//邮件发送者
msg.setFrom(new InternetAddress("**发送人的邮箱地址**"));
 
//发送邮件
Transport transport = session.getTransport();
transport.connect("smtp.qq.com", "**发送人的邮箱地址**", "**你的邮箱密码或者授权码**");
 
transport.sendMessage(msg, new Address[] { new InternetAddress("**接收人的邮箱地址**") });
transport.close();

しかし、エラーが報告されました

DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed
Exception in thread "main" javax.mail.AuthenticationFailedException: 530
Error: A secure connection is requiered(such as ssl). More information at http://service.mail.qq.com/cgi-bin/help?id=28

サンプル コードでは 163 メールボックスを使用しており、作成者は QQ メールボックスを使用しているため、ログ分析を見ると、QQ メールボックスには SSL 暗号化が必要であることがわかります。

SSL暗号化を有効にする

オンラインで検索したところ、163やSinaなどの他のメールボックスはSSL暗号化を必要としないことがわかりました。QQメールボックスをあきらめることができます。

インターネット上では、smtp.qq.com を smtp.exmail.qq.com に置き換えるには SSL 暗号化が必要ないという意見もありますが、作成者はそれを正常に実行しませんでした。それでは、SSL 暗号化を追加しましょう。

次のコードは SSL 暗号化を有効にします

MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);

正常にコンソール出力されるログとレンダリングは次のとおりです

DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.qq.com", port 465, isSSL true
220 smtp.qq.com Esmtp QQ Mail Server
DEBUG SMTP: connected to host "smtp.qq.com", port: 465
...
 data 2016-01-19 17:00:44 Tue
.
250 Ok: queued as
QUIT
221 Bye

完全なコード例 Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。

public class MailTool {
  public static void main(String[] args) throws MessagingException, GeneralSecurityException {
    Properties props = new Properties();
 
    // 开启debug调试
    props.setProperty("mail.debug", "true");
    // 发送服务器需要身份验证
    props.setProperty("mail.smtp.auth", "true");
    // 设置邮件服务器主机名
    props.setProperty("mail.host", "smtp.qq.com");
    // 发送邮件协议名称
    props.setProperty("mail.transport.protocol", "smtp");
 
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    props.put("mail.smtp.ssl.enable", "true");
    props.put("mail.smtp.ssl.socketFactory", sf);
 
    Session session = Session.getInstance(props);
 
    Message msg = new MimeMessage(session);
    msg.setSubject("seenews 错误");
    StringBuilder builder = new StringBuilder();
    builder.append("url = " + "http://blog.csdn.net/never_cxb/article/details/50524571");
    builder.append("\n页面爬虫错误");
    builder.append("\n时间 " + TimeTool.getCurrentTime());
    msg.setText(builder.toString());
    msg.setFrom(new InternetAddress("**发送人的邮箱地址**"));
 
    Transport transport = session.getTransport();
    transport.connect("smtp.qq.com", "**发送人的邮箱地址**", "**你的邮箱密码或者授权码**");
 
    transport.sendMessage(msg, new Address[] { new InternetAddress("**接收人的邮箱地址**") });
    transport.close();
  }
}

上記 これですべてです記事内容、皆様の学習のお役に立てれば幸いです。

QQ メールボックスに電子メールを送信する Java ベースの JavaMail ベースの実装については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。