2014-02-19 34 views
4

我们正在使用Spring邮件发送从java应用程序的电子邮件 org.springframework.mail.javamail.JavaMailSenderImpl例外:被拒绝的传递

春天电子邮件配置是

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" autowire-candidate="default"> 
     <property name="host" value="${test.email.host}" /> 
     <property name="port" value="${test.email.port}" /> 
     <property name="username" value="${test.email.username}" /> 
     <property name="password" value="${test.email.password}" /> 
     <property name="javaMailProperties"> 
      <props> 
       <prop key="mail.smtp.auth">true</prop> 

      </props> 
     </property> 
    </bean> 

的Java代码快照

@Autowired(required = true) 
    @Qualifier("errorMessageMailSender") 
    JavaMailSenderImpl mailSender; 

    .............. 
    .............. 

      try { 
       MimeMessage mailMessage = buildEmailMimeMessage(properties,mimeMultipart); 
       logger.info(String.format("Built MimeMessage object is <%s>",mailMessage)); 
       if (mailMessage != null) { 
        mailSender.send(mailMessage); 
        logger.info("Mail sent Successfully"); 
       }else{ 
        logger.info("Mail send failed as Mail message object construction failed."); 
       } 
       result=true; 
      } catch (Exception e) { 
       logger.error("An exception occurred while sending mail :: " + e.getMessage()); 
      } 

属性文件

test.email.host=mail.mydomain.net 
test.email.port=2525 
[email protected] 
test.email.password=mypassword 

但我们例外下面,并没有被发送的电子邮件

An exception occurred while sending mail :: Failed messages: javax.mail.SendFailedException: Invalid Addresses; 
    nested exception is: 
    com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 <[email protected]>... Relaying denied 
+0

检查http://www.gammadyne.com/relaying_denied.htm,谷歌的第一个结果 –

+0

这是一个SMTP问题,而不是Java问题... – fge

+0

如果我保持我的用户名和密码属性为空白,将smtp auth属性设置为true,会导致这个问题? –

回答

4

,你要发送邮件的SMTP服务器将拒绝中继。如果您的本地服务器不是问题,则可以更改配置以从mydomain.net中继邮件。但如果它是外部服务器(例如gmail),则必须使用真实的注册域。

为了在邮件服务器上测试你的代码,我建议你设置一个dockerized的Apache James服务器,创建一些测试用户并发送和接收邮件。

1

工作代码,

import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class JavaEmail { 

    Properties emailProperties; 
    Session mailSession; 
    MimeMessage emailMessage; 

    public static void main(String args[]) throws AddressException, 
      MessagingException { 

     JavaEmail javaEmail = new JavaEmail(); 

     javaEmail.setMailServerProperties(); 
     javaEmail.createEmailMessage(); 
     javaEmail.sendEmail(); 
    } 

    public void setMailServerProperties() { 

     String emailPort = "587";//gmail's port 

     emailProperties = System.getProperties(); 
     emailProperties.put("mail.smtp.port", emailPort); 
     emailProperties.put("mail.smtp.auth", "true"); 
     emailProperties.put("mail.smtp.starttls.enable", "true"); 

    } 

    public void createEmailMessage() throws AddressException, 
      MessagingException { 
     String[] toEmails = { "enter to mail ids" }; 
     String emailSubject = "Java Email"; 
     String emailBody = "This is an email sent by JavaMail api."; 

     mailSession = Session.getDefaultInstance(emailProperties, null); 
     emailMessage = new MimeMessage(mailSession); 

     for (int i = 0; i < toEmails.length; i++) { 
      emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i])); 
     } 

     emailMessage.setSubject(emailSubject); 
     emailMessage.setContent(emailBody, "text/html");//for a html email 
     //emailMessage.setText(emailBody);// for a text email 

    } 

    public void sendEmail() throws AddressException, MessagingException { 

     String emailHost = "smtp.gmail.com"; 
     String fromUser = "enter from Id";//ignore gmail domain 
     String fromUserEmailPassword = "enter password"; 

     Transport transport = mailSession.getTransport("smtp"); 

     transport.connect(emailHost, fromUser, fromUserEmailPassword); 
     transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); 
     transport.close(); 

    } 

} 
0

据我所知,你的emailservice必须是你的生产领域内。你不能从该领域之外打出prod smtp服务器。至少我遇到的问题就是这种情况。

相关问题