ホームページ >Java >&#&チュートリアル >Java は、JavaMail に基づいて QQ メールボックスへの電子メールの送信を実装します。
最近、ニュース クローラー プロジェクトに取り組んでおり、この機能を実装したいと考えています。ページのクロールが失敗した後、このページの URL をメールに送信します。最終的なレンダリングは次のとおりです。フィルター ラベル、障害ステータス コードなどを後で追加して、例外の分類と検索を容易にすることができます。
開発者は、メール内の URL とスタック情報に基づいて、クローラーの失敗の理由を分析できます。
サーバーがダウンしていますか?
それとも、クローラーの Dom 解析がコンテンツを解析しないのでしょうか?
SMTP サービスをオンにしてください
QQ メールボックスを開いた後、コード内のメールボックスに接続するには、この認証コードを使用して元のメールボックスのパスワードを使用しないようにしてください。プレーンテキストのパスワード。
この記事 Java Mail (2): JavaMail の概要と簡単な電子メールを送信するためのサンプル コードを基にオンラインで例を確認しました
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
完全なコード例
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 サイトに注目してください。