2010-02-13 98 views
3

如何发送邮件使用gmail smtp的Spring实现?如何发送邮件使用gmail smtp的Spring实现?

执行主方法得到exeception 异常螺纹后的 “主” java.lang.NoClassDefFoundError:的javax /激活/的FileTypeMap

public static void main(String[] args) { 
     JavaMailSenderImpl sender = new JavaMailSenderImpl(); 
     sender.setHost("smtp.gmail.com"); 
     sender.setPort(25); 
     sender.setPassword("xxxxxxx"); 
     sender.setUsername("[email protected]"); 

     MimeMessage message = sender.createMimeMessage(); 
     try { 
      MimeMessageHelper helper = new MimeMessageHelper(message); 
      helper.setTo("[email protected]"); 
      helper.setText("Thank you for ordering!"); 
     } catch (MessagingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     sender.send(message); 
    } 

推杆的activation.jar类路径收到这个例外

javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first. 21sm3277189pzk.7 

回答

0
+0

在线程执行所述方法获得以下异常 异常后的“主” java.lang.NoClassDefFoundError:的javax /激活/的FileTypeMap \t在玉米.businesscaliber.utility.Mailer.main(Mailer.java:13) – Vicky 2010-02-13 06:36:02

+0

看起来像是一个从类路径中缺少的jar ...在那里是activation.jar? – user262976 2010-02-13 07:04:55

+0

后加入活化罐子得到另一个exeception javax.mail.MessagingException的:530 5.7.0必须首先发出STARTTLS命令。 21sm3277189pzk.7 – Vicky 2010-02-13 07:25:28

1

据我所知,Gmail只会支持加密SMTP,并且错误信息是告诉你,在一个相当迂回的方式。你需要配置Spring来使用它来代替纯文本SMTP。

this answer到以前的问题,这也解释了如何配置JavaMailSenderImpl做到这一点(我没有测试它为我自己,虽然)。

7
在SAURABH后较短,修订版

,您可以简单:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="smtp.gmail.com" 
    p:port="587" p:username="[email protected]" p:password="aSmartPassWord"> 
    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.smtp.auth">true</prop> 
      <prop key="mail.smtp.starttls.enable">true</prop> 
      <prop key="mail.smtp.timeout">8500</prop> 
     </props> 
    </property> 
</bean> 
1

您需要添加行:

Properties props = new Properties(); 
props.put("mail.smtp.auth", "true"); 
props.put("mail.smtp.starttls.enable", "true"); 
sender.setJavaMailProperties(props); 

属性类java.util.Properties。

第一次你会得到错误“......请通过网络浏览器登录,然后再试一次......”,所以你需要去你的谷歌邮箱和读取新的字母。将会有链接关闭安全设置。

0

下面是使用只是XML结构的局部例子,

<int:channel id="outboundMail"></int:channel> 

<int-mail:outbound-channel-adapter id="outboundAdapter" 
     channel="outboundMail" 
     host="smtp.gmail.com" 
     username="[email protected]" 
     password="whatever" 
     port="587" 
     java-mail-properties="javaMailProperties"/> 

<util:properties id="javaMailProperties"> 
    <prop key="mail.debug">false</prop> 
    <prop key="mail.smtp.auth">true</prop> 
    <prop key="mail.smtp.starttls.enable">true</prop> 
    <prop key="mail.smtp.timeout">8500</prop> 
</util:properties>