java 邮件 tls_通过TLS发送的Java邮件

java 邮件 tls

抽象

本博客的目的是演示如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。

免责声明

这篇文章仅供参考。 在使用所提供的任何信息之前,请认真思考。 从中学到东西,但最终自己做出决定,风险自负。

要求

我使用以下主要技术完成了本文的所有工作。 您可能可以使用不同的技术或版本来做相同的事情,但不能保证。

  • NetBeans 11.2
  • Maven 3.3.9(与NetBeans捆绑在一起)
  • Java 11(zulu11.35.15-ca-jdk11.0.5-win_x64)
 <dependency> 
   <groupId>javax.mail</groupId> 
   <artifactId>mail</artifactId> 
   <version> 1.4 </version> 
   <scope>test</scope>  </dependency> 

下载

访问我的GitHub页面https://github.com/mjremijan以查看我所有的开源项目。 这篇文章的代码位于thoth-email-via-tls模块中的https://github.com/mjremijan/thoth-email

物产

本示例使用smtp-tls-outlook.properties文件保存SMTP服务器信息。 我用我个人的Outlook帐户进行测试,因此使用这个词的outlook属性文件中的名称。 重要的是文件的内容,如清单1所示。

清单1 –属性文件

 # This is the name of the SMTP host machine.  host=  # This is the port number of the SMTP host machine.  # The same host may support both SSL and TLS but on  # different ports. So make sure you get the TLS port.  port=  # This is what you use in the “username” field when  # you login. Typically # you login. Typically this is the same as your email  # address, but this isn't always the case .  username=  # This is what you use in the “password” field when  # you login. This value is CLEAR TEXT, so keep # you login. This value is CLEAR TEXT, so keep this  # properties file safe.  password=  # This is the email address you want for the  # email's FROM field. Enter the value using  # the format shown below. Typically # the format shown below. Typically this is  # just your email address for the account.  from=FIRSTNAME LASTNAME <ADDRESS @EMAIL .COM>  # This is the email address you want for the  # email's REPLY_TO field. Enter the value using  # the format shown below. Typically # the format shown below. Typically this is  # just your email address for the account. Also the account. Also  # typically this is the same as `from` above.  # But be warned, if an email's FROM and REPLY_TO  # are different, that's may be flagged as spam  # and never be delivered. So keep `from` and  # `reply` the same for initial testing  reply=FIRSTNAME LASTNAME <ADDRESS @EMAIL .COM>  # This is the email address you want to send  # the email to. For testing, it's a good idea  # to send it to yourself first.  to=FIRSTNAME LASTNAME <ADDRESS @EMAIL .COM> 

现在您有了一个属性文件,接下来让我们看一下代码。

这是一个JUnit测试,演示了如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。 清单2显示了代码。

注意对于初始测试,请始终检查您的SPAM文件夹。 可以始终添加一条规则以将其传递到您的INBOX。

清单2 – Java Mail示例

 package org.thoth.email.via.tls;  import java.net.InetAddress;  import java.text.SimpleDateFormat;  import java.util.Date;  import java.util.Properties;  import javax.mail.Authenticator;  import javax.mail.Message;  import javax.mail.PasswordAuthentication;  import javax.mail.Session;  import javax.mail.Transport;  import javax.mail.internet.InternetAddress;  import javax.mail.internet.MimeBodyPart;  import javax.mail.internet.MimeMessage;  import javax.mail.internet.MimeMultipart;  import org.junit.jupiter.api.BeforeEach;  import org.junit.jupiter.api.Test;  public class TlsTest { 
   public TlsTest() { 
   } 
   String now, hostname; protected String now, hostname; 
   protected Properties outlook; 
   @BeforeEach 
   public void setUp() throws Exception { 
     now = new SimpleDateFormat( "MM-dd-yyyy hh:mm:ss a" ).format( new Date()); 
     hostname = InetAddress.getLocalHost().getHostName(); 
     outlook = new Properties(); 
     outlook.load( this .getClass().getResourceAsStream( "/smtp-tls-outlook.properties" )); 
   } 
   @Test 
   public void a_test() throws Exception { 
     // Create MimeMultipart 
     MimeMultipart content = new MimeMultipart( "related" ); 
     // html part 
     { 
       MimeBodyPart textPart = new MimeBodyPart(); 
       textPart.setText( "<html><body>" 
         + "<p>Time: " +now+ "</p>" 
         + "<p>From: " +hostname+ "</p>" 
         + "</body></html>" 
         , "UTF8" , "html" ); 
       content.addBodyPart(textPart); 
     } 
     // properties 
     Properties props = new Properties(); 
     { 
       props.setProperty( "mail.smtp.auth" , "true" ); 
       props.setProperty( "mail.smtp.host" , outlook.getProperty( "host" )); 
       props.setProperty( "mail.smtp.port" , outlook.getProperty( "port" )); 
       props.setProperty( "mail.smtp.starttls.enable" , "true" ); 
     } 
     Session smtp = null ; 
     { 
       smtp = Session.getInstance(props, new Authenticator() { 
         @Override 
         protected PasswordAuthentication getPasswordAuthentication() { 
           return new PasswordAuthentication( 
               outlook.getProperty( "username" ) 
             , outlook.getProperty( "password" ) 
           ); 
         } 
       }); 
       smtp.setDebug( true ); 
       smtp.setDebugOut(System.out); 
     } 
     MimeMessage m = new MimeMessage(smtp); 
     { 
       m.setRecipient(Message.RecipientType.TO, new InternetAddress(outlook.getProperty( "to" ))); 
       m.setSubject( "thoth-email TLS test " + now); 
       InternetAddress from = null ; 
       { 
         from = new InternetAddress(outlook.getProperty( "from" )); 
         from.setPersonal( "Thoth Email" ); 
         m.setFrom(from); 
       } 
       InternetAddress reply = null ; 
       { 
         reply = new InternetAddress(outlook.getProperty( "reply" )); 
         m.setReplyTo( new InternetAddress[] {reply}); 
       } 
       m.setContent(content); 
     } 
     Transport.send(m); 
   }  } 

摘要

发送邮件的代码不是很困难。 成功接收电子邮件而不将其标记为垃圾邮件是另一回事。 但是,如果您遵循此示例,请使用有效的帐户,并且不要过度使用它,则应该可以。 该博客显示了如何使用Java Mail通过具有TLS连接的SMTP服务器发送电子邮件。

翻译自: https://www.javacodegeeks.com/2020/02/java-mail-sent-over-tls.html

java 邮件 tls

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值