2011-12-01 58 views
1
try { 
    InternetAddress to = new InternetAddress("[email protected]"); 
    InternetAddress from = new InternetAddress("[email protected]"); 
    String sub = new String("test"); 
    String body = new String("test-mail"); 
    MailMessage msg = new MailMessage(); 
    msg.setTo(to); 
    msg.setFrom(from); 
    msg.setBody(body); 
    msg.setSubject(sub); 
    MailServiceUtil.sendEmail(msg); 
    MailEngine.send(from, to, sub, body); 
} catch (Exception e) { 
    System.out.println("can't send mail"); 
} 
MailServiceUtil.sendEmail(msg); 

发送电子邮件这种方式只是没有工作不能支持Liferay

MailEngine.send(from, to, sub, body); 

这样给我说的错误:

Could not connect to SMTP host: smtp.gmail.com, port: 465, response: -1 

我应该怎么做让它起作用?

回答

1

您缺少认证属性,请检查this以获取完整示例。

+0

谢谢你,我已经尽力通过ROOT.xml和控制面板设置我的SMTP属性,你有另一个想法吗? – user1075116

+0

@ user1075116你在哪里设置用户名和密码?有一个例子适合你吗? – stacker

1

最有可能的问题是您使用不带SSL的SMTP协议进行连接。如果这是基于JavaMail的,请确保您使用smtps协议,因为这是使用SSL的SMTP。另外请确保您启用身份验证。请参阅JavaMail FAQ entry on GMail

1

您是否在邮件配置页面的“传出SMTP服务器”下检查了“使用安全网络连接”?

您也可以尝试设置“手动指定其他JavaMail属性以覆盖上述配置。”到

mail.smtp.auth=true 
mail.smtp.port=465 
mail.smtp.socketFactory.port=465 
mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 
mail.smtp.socketFactory.fallback=false 
+0

由于JavaMail有一个单独的smtps协议提供程序来处理使用SSL的SMTP,因此不再需要为SSL指定单独的socketFactory(而不是自从JavaMail 1.2或1.3相信以来)。 –

1

发送来自Liferay的邮件我推荐使用Message Bus。有两个目的专门用于此目的。您可以在我的GitHub存储库中找到完整的示例。 A遵循一段使用类SubscriptionSender的示例代码,该类继而使用消息总线。

  SubscriptionSender subscriptionSender = new SubscriptionSender(); 

     subscriptionSender.setSubject("Lista degli utenti disattivati"); 
     subscriptionSender.setBody(emailBody.toString()); 
     subscriptionSender.setUserId(user.getUserId()); 
     subscriptionSender.setCompanyId(user.getCompanyId()); 
     subscriptionSender.setFrom("[email protected]", "Liferay Portal"); 
     subscriptionSender.setHtmlFormat(false); 
     subscriptionSender.setMailId("user", user.getUserId()); 

     subscriptionSender.addRuntimeSubscribers(
      user.getEmailAddress(), 
      user.getFullName()); 

     List<EmailAddress> emails = (List<EmailAddress>) user.getEmailAddresses(); 
     if (emails.size() > 0) { 
      if (_log.isInfoEnabled()) { 
       _log.info("User " + user.getUserId() + 
        " has additional emails address"); 
      } 
      for (EmailAddress emailAddress : emails) { 
       subscriptionSender.addRuntimeSubscribers(
        emailAddress.getAddress(), 
        (String) user.getFullName()); 

      } 
     } 

     subscriptionSender.flushNotificationsAsync(); 

你可以找到SendMail.java

0

这是在为我工作多年portal-ext.properties一个Gmail配置完整的源:

mail.session.mail.pop3.host=localhost 
mail.session.mail.pop3.password= 
mail.session.mail.pop3.port=110 
mail.session.mail.pop3.user= 
mail.session.mail.smtp.auth=true 
mail.session.mail.smtp.host=smtp.gmail.com 
mail.session.mail.smtp.port=465 
mail.session.mail.smtp.password=<MY-PASSWORD-ON-GMAIL> 
mail.session.mail.smtp.user=<MY-USERNAME-ON-GMAIL-([email protected])> 
mail.session.mail.store.protocol=pop3 
mail.session.mail.transport.protocol=smtp 
mail.session.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 
mail.session.mail.smtp.starttls.enable=true