从Java REST服务发送验证码/链接

时间:2019-08-29 20:14:46

标签: java rest email smtp dropwizard

我有一个dropwizard REST服务,并且我试图在用户注册后实施发送验证电子邮件链接/代码。

我的用户表中的数据库中有一个名为is_active的字段,用于指示用户是否已通过验证。

  private String email;
  @JsonProperty
  private String password;
  @JsonProperty
  private String name;
  @JsonProperty
  private String surname;
  @JsonProperty
  private boolean isActive;

我正在尝试找出发送此验证电子邮件的正确方法,我编写了一个向用户发送SMTP电子邮件的类,但是我对是否正确发送电子邮件表示怀疑?

public class SendEmail  
{  
 public static void main(String [] args){  
      String to = "customer@gmail.com";
      String from = "mycompany@gmail.com";  
      String host = "localhost";

      Properties properties = System.getProperties();  
      properties.setProperty("mail.smtp.host", host);  
      Session session = Session.getDefaultInstance(properties);  
      try{  
         MimeMessage message = new MimeMessage(session);  
         message.setFrom(new InternetAddress(from));  
         message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  
         message.setSubject("verification email");  
         message.setText("Hello, this is sample verification email ");  

         Transport.send(message);  
         System.out.println("message sent successfully....");  

      }catch (MessagingException mex) {mex.printStackTrace();}  
   }  
}  

这是我应该如何实现或使用诸如sendgrid之类的外部提供程序吗?

1 个答案:

答案 0 :(得分:0)

您的方法很好。要考虑的一些事情:

  • SMTP服务器在哪个时间范围内接收多少电子邮件?某些SMPT服务器会应用速率限制,这可能会导致消息发送失败。您的代码应能识别出这一点,并制定策略,也许以后再重新发送电子邮件。
  • 电子邮件正文中的验证链接应包含唯一的秘密,该秘密只能用于验证特定用户。此秘密必须存储并与用户关联。
  • 链接应包含诸如用户ID或名称之类的内容。这样的链接很容易被伪造。
  • 通过单击验证链接调用的REST API应该获取秘密并查找与之关联的用户。