Maison >Java >javaDidacticiel >Java implémente l'envoi d'e-mails à la boîte aux lettres QQ basée sur JavaMail
Récemment, je travaille sur un projet de robot d'exploration d'actualités et je souhaite implémenter cette fonction : après l'échec de l'exploration d'une page, envoyez l'URL de cette page à l'e-mail. Le rendu final est le suivant. Les étiquettes de filtre, les codes d'état d'échec, etc. peuvent être ajoutés ultérieurement pour faciliter la classification et la recherche d'exceptions.
Les développeurs peuvent analyser les raisons de l'échec du robot d'exploration en fonction de l'URL et des informations de pile contenues dans l'e-mail.
Le serveur est-il en panne ?
Ou l'analyse Dom du robot d'exploration n'analyse-t-elle pas le contenu
Ou l'expression régulière n'est-elle pas applicable à cette page
Activer ? Service SMTP
Activez le service SMTP dans Paramètres->Compte de la boîte aux lettres QQ
Notez qu'après l'ouverture, la boîte aux lettres QQ générera un code d'autorisation dans. le code Utilisez ce code d'autorisation à la place du mot de passe de messagerie d'origine pour vous connecter à la messagerie électronique. Cela évite d'utiliser des mots de passe en texte clair.
J'ai vérifié des exemples en ligne, et sur la base de cet article Java Mail (2) : Introduction à JavaMail et exemple de code pour envoyer un simple e-mail
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();
Mais une erreur a été signalée
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
Parce que l'exemple de code utilise la boîte aux lettres 163, et l'auteur est QQ Mailbox, regardez l'analyse du journal et il s'avère que la boîte aux lettres QQ nécessite un cryptage SSL.
Activer le cryptage SSL
J'ai effectué une recherche en ligne et j'ai découvert que d'autres boîtes aux lettres, telles que 163 et Sina, ne nécessitent pas de cryptage SSL, vous pouvez donc abandonner les boîtes aux lettres QQ.
Il existe également un dicton sur Internet selon lequel le remplacement de smtp.qq.com par smtp.exmail.qq.com ne nécessite pas de cryptage SSL, mais l'auteur ne l'a pas exécuté avec succès. Ajoutons donc simplement le cryptage SSL.
Le code suivant active le cryptage SSL
MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.ssl.socketFactory", sf);
Avec succès, le journal de sortie de la console et les rendus sont les suivants
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
Exemple de code complet
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(); } }
Ce qui précède est l'intégralité du contenu de ce article, j'espère qu'il sera utile à l'étude de chacun.
Pour plus d'implémentation JavaMail basée sur Java pour l'envoi d'e-mails aux boîtes aux lettres QQ, veuillez faire attention au site Web PHP chinois !