2015-02-11 61 views
1

我想通過將代碼部署到GAE來使用SendGrid發送郵件。以下是我的代碼。GAE不適用於使用發送網格使用java發送郵件

private static final String SMTP_HOST_NAME = "smtp.sendgrid.net"; 
    private static final String SMTP_AUTH_USER = "*******"; 
    private static final String SMTP_AUTH_PWD = "*******"; 
    private static final int SMTP_PORT = 2525; 

    public void sendCustomer(String userName, String toEmail, int custId) { 

     try { 
      Properties props = new Properties(); 
      props.put("mail.transport.protocol", "smtp"); 
      props.put("mail.smtp.auth", "true"); 

      Authenticator auth = new SMTPAuthenticator(); 
      Session mailSession = Session.getDefaultInstance(props, auth); 
      Transport transport = mailSession.getTransport(); 


      MimeMessage message = new MimeMessage(mailSession); 

      Multipart multipart = new MimeMultipart("alternative"); 

      // Sets up the contents of the email message 
      BodyPart part1 = new MimeBodyPart(); 

      part1.setText("Hello " 
        + userName 
        + "\n\n\n\n" 
        + "Welcome to NotionViz. You have been registered successfully in NotionViz."); 

      multipart.addBodyPart(part1); 
      message.setText("UTF-8", "html"); 
      message.setContent(multipart); 
      message.setFrom(new InternetAddress(SMTP_AUTH_USER)); 
      message.setSubject("Customer Registration"); 
      InternetAddress internetAddress = null; 

      try { 
       internetAddress = new InternetAddress(toEmail); 
       internetAddress.validate(); 

      } catch (Exception e) { 

       System.out.println("Not a valid email address"); 

      } 
      message.addRecipient(Message.RecipientType.TO, internetAddress); 

      InternetAddress address = new InternetAddress("[email protected]"); 

      message.setFrom(address); 

      // Sends the email 
      transport.connect(SMTP_HOST_NAME, SMTP_PORT, SMTP_AUTH_USER, 
        SMTP_AUTH_PWD); 
      transport.sendMessage(message, 
        message.getRecipients(Message.RecipientType.TO)); 
      transport.sendMessage(message, 
        message.getFrom()); 
      transport.close(); 

     } catch (Exception e) { 

     } 

    } 

    // Authenticates to SendGrid 
    class SMTPAuthenticator extends javax.mail.Authenticator { 
     @Override 
     public PasswordAuthentication getPasswordAuthentication() { 
      String username = SMTP_AUTH_USER; 
      String password = SMTP_AUTH_PWD; 
      return new PasswordAuthentication(username, password); 
     } 
    } 

此程序工作正常,並在本地發送郵件。但是,如果我部署到GAE並檢查,我沒有收到電子郵件。請讓我知道爲什麼GAE限制第三方郵件發送。

回答

2

嘗試更改您使用的端口。您可以通過端口587,25或2525點擊SendGrid進行純文本/ TLS連接(如果您打算使用SSL,則爲465)。

SendGrid建議端口587,以避免一些託管公司設置的速率限制,所以我會給這個鏡頭。

0

在GAE套接字上受到一系列限制(請參閱套接字API documentation)。在提交端口587上允許經過身份驗證的SMTP,因此您可以按照LaCroix的建議使用它。