Maison  >  Article  >  Java  >  Java implémente l'envoi d'e-mails à la boîte aux lettres QQ basée sur JavaMail

Java implémente l'envoi d'e-mails à la boîte aux lettres QQ basée sur JavaMail

高洛峰
高洛峰original
2017-01-16 09:49:471845parcourir

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.

Java implémente lenvoi de-mails à la boîte aux lettres QQ basée sur JavaMail

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

Java implémente lenvoi de-mails à la boîte aux lettres QQ basée sur JavaMail

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.

Java implémente lenvoi de-mails à la boîte aux lettres QQ basée sur JavaMail

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

Java implémente lenvoi de-mails à la boîte aux lettres QQ basée sur JavaMail

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 !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn