Prefácio
O código para enviar o email foi copiado diretamente de um aplicativo anterior. O serviço de e -mail Tencent que usei no passado não tem problemas com a execução do programa. Mais tarde, depois de modificá -lo no serviço de correio do Office365 da Microsoft, encontrei dois problemas.
Pergunta 1, configurações de criptografia TLS
As informações de exceção são as seguintes:
Exceção no thread "main" com.sun.mail.smtp.smtpsendFailedException: 530 5.7.57 SMTP; O cliente não foi autenticado para enviar e -mail anônimo durante o correio de
Isso é mais fácil de resolver. Depois de encontrar algumas informações, adicione a seguinte configuração:
Mail.smtp.starttls.enable = true
Pergunta 2: Protocolo rápido é nulo:
As informações de exceção são as seguintes:
Exception in thread "main" javax.mail.NoSuchProviderException: Invalid protocol: null at javax.mail.Session.getProvider(Session.java:449) at javax.mail.Session.getTransport(Session.java:667) at javax.mail.Session.getTransport(Session.java:648) at javax.mail.session.gettransport (session.java:634)
Esse problema é encontrado somente após a implantação do aplicativo em um ambiente de produção. Após a inspeção, descobri que o pacote JAR que eu liguei não era a versão que especifiquei no Maven. Mais tarde, foi confirmado que o pacote JAR usado pelo aplicativo conflitou com o pacote JAR usado pelo contêiner (ou seja, caça). A versão JAR usada pelo contêiner é mais antiga, mas os frascos do contêiner são carregados por padrão. Existem duas maneiras de resolver esse problema:
Reescreva o código com frascos que dependem de contêineres;
Atualize o jar do contêiner.
A segunda opção é um pouco perigosa; portanto, use a primeira opção, basta modificar uma linha:
Transporte de transporte = session.gettransport ("smtp");Esse problema ocorrerá no javax.mail versão 1.4. Posteriormente, versões mais altas usarão o protocolo SMTP para enviar e -mails por padrão.
Programa modificado:
pacote com.zhyea.zyTools; importar java.util.date; importar java.util.properties; importar javax.mail.message; importar javax.mail.session; importaddress.mail.mail.Transport; importAx.MernErnet.ImernTax; String final estática Mail_smtp_host = "smtp.exmail.qq.com"; Inteiro final estático privado Mail_smtp_port = 587; private estático final booleano Mail_smtp_auth = true; String final estática privada Mail_smtp_User = "[email protected]"; String final estática privada Mail_smtp_password = "robinzhyea"; Propriedades estáticas privadas Props = new Properties (); static {props.put ("Mail.smtp.host", Mail_smtp_host); ProPs.put ("Mail.smtp.auth", Mail_smtp_auth); ProPs.put ("Mail.smtp.user", Mail_smtp_User); ProPs.put ("Mail.smtp.password", Mail_smtp_password); props.put ("Mail.smtp.starttls.enable", true); }/*** Envie email*/public static void send (string para, título da string, String Content) {try {session session = session.getInstance (props); // Crie um correio Mimemessage message = new Mimemessage (sessão); // Crie um novo objeto de mensagem do correio. message.setRecipient (message.recipientType.to, new InternetAddress (to)); // Defina o destinatário e defina seu tipo de recebimento como // defina a mensagem content // message.settext (MailContent); // Envie um email de texto simples TODO message.SetSubject (título); // Defina o título message.setContent (Content, "text/html; charset = gbk"); // Enviar e -mail html, o estilo de conteúdo é mais rico. Transport.Connect (Mail_smtp_User, Mail_smtp_password); Transport.sendMessage (message, message.getAllRecipients ()); // Enviar email, o segundo parâmetro é tudo definido endereços de destinatários transport.close (); } catch (Exceção e) {e.printStackTrace (); }}} pacote com.zhyea.zytools; importar java.util.date; importar java.util.properties; importar javax.mail.message; importar javax.mail.session; importar javax.mail.transport; importar javax.mail.internet.internetaddress; importar javax.mail.internet.mimemessage; classe pública MailSender {private Static final String Mail_smtp_host = "smtp.exmail.qq.com"; Inteiro final estático privado Mail_smtp_port = 587; private estático final booleano Mail_smtp_auth = true; String final estática privada Mail_smtp_User = "[email protected]"; String final estática privada Mail_smtp_password = "robinzhyea"; Propriedades estáticas privadas Props = new Properties (); static {props.put ("Mail.smtp.host", Mail_smtp_host); ProPs.put ("Mail.smtp.auth", Mail_smtp_auth); ProPs.put ("Mail.smtp.user", Mail_smtp_User); ProPs.put ("Mail.smtp.password", Mail_smtp_password); props.put ("Mail.smtp.starttls.enable", true); }/*** Envie email*/public static void send (string para, título da string, String Content) {try {session session = session.getInstance (props); // Crie um correio Mimemessage message = new Mimemessage (sessão); // Crie um novo objeto de mensagem do correio. message.setRecipient (message.recipientType.to, new InternetAddress (to)); // Defina o destinatário e defina seu tipo de recebimento como // defina a mensagem content // message.settext (MailContent); // Envie um email de texto simples TODO message.SetSubject (título); // Defina o título message.setContent (Content, "text/html; charset = gbk"); // Enviar e -mail html, o estilo de conteúdo é mais rico. Transport.Connect (Mail_smtp_User, Mail_smtp_password); Transport.sendMessage (message, message.getAllRecipients ()); // Enviar email, o segundo parâmetro é tudo definido endereços de destinatários transport.close (); } catch (Exceção e) {e.printStackTrace (); }}}
O exposto acima é todo o conteúdo deste artigo. Espero que o conteúdo deste artigo seja útil para o estudo e o trabalho de todos.