首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有来自服务的属性的自定义JMail交付

具有来自服务的属性的自定义JMail交付
EN

Stack Overflow用户
提问于 2013-08-14 02:22:50
回答 1查看 174关注 0票数 0

我知道这个问题很老了,但是我没有找到任何在类中而不是在xml中添加属性的SimpleMailMessage解决方案。我的应用程序启动后没有异常,它只是不发送邮件。方法CustomMailDeliveryImpl.sendMail()是从控制器中触发的。我找不到一个错误。

代码语言:javascript
复制
@Component("CustomMailDelivery")
public class CustomMailDeliveryImpl implements CustomMailDelivery {

    protected static Logger logger = Logger.getLogger(CustomMailDeliveryImpl.class);

    private EmployeeService employeeService;

    private String username = "* * *@gmail.com";

    private String password = "* * *";

    private JavaMailSenderImpl sender = new JavaMailSenderImpl();

    @Autowired
    public void setSender(JavaMailSenderImpl sender) {
        this.sender = sender;
    }

    @Autowired
    public void setEmployeeService(EmployeeService employeeService) {
        this.employeeService = employeeService;
    }

    /**
     * @param from    - must contain address of sender,
     * @param to      - must contain address of target,
     * @param subject - must be included with short description,
     * @param body    - main message of mail.
     * @throws RuntimeException if any param is empty.
     */
    public void sendMail(String from, String to, String subject, String body) {

        // selecting settings from DB
        SystemSettingsModel settingsModel = employeeService.getSettingsByName("default");

        // defining settings
        sender.setHost(settingsModel.getSmtpServerAddress());
        sender.setPort(settingsModel.getSmtpServerPort());
        sender.setUsername(username);
        sender.setPassword(password);

        // defining SMTP properties
        Properties properties = new Properties();

        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        properties.put("mail.debug", "1");

        Session session = Session.getDefaultInstance(properties, null);

        sender.setSession(session);

        // initiating mail
        SimpleMailMessage simpleMessage = new SimpleMailMessage();
        try {
            if (from != null && to != null) {
                if (subject != null && body != null) {

                    simpleMessage.setFrom(from);
                    simpleMessage.setTo(to);
                    simpleMessage.setSubject(subject);
                    simpleMessage.setText(body);

                    sender.send(simpleMessage);

                    logger.debug("Mail has been sent successfully");
                } else {
                    throw new MessagingException("Subject and message of mail is empty!");
                }
            } else {
                throw new MessagingException("Address of object and target is empty!");
            }
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}

感谢任何帮助!

EN

回答 1

Stack Overflow用户

发布于 2013-08-14 22:04:32

我终于克服了这个问题,我确实找到了解决方案!用这种方式?您可以从页面配置或DAO服务传递属性!

代码语言:javascript
复制
@Component("CustomMailDeliveryImpl")
public class CustomMailDeliveryImpl implements CustomMailDelivery {

private EmployeeService employeeService;

private Transport transport;

private String username = "***@gmail.com";

private String password = "***";

private SystemSettingsModel settingsModel;

private Session session;

private MimeMessage message;

private InternetAddress fromAddress, toAddress;

private Properties properties;

@Autowired
public void setEmployeeService(EmployeeService employeeService) {
    this.employeeService = employeeService;
}


public void sendMail(String from, String to, String subject, String body) throws    SendFailedException {

    settingsModel = employeeService.getSettingsByName("default");

    // defining properties
    properties = new Properties();
    properties.put("mail.smtp.host", settingsModel.getSmtpServerAddress());
    properties.put("mail.smtp.port", settingsModel.getSmtpServerPort());
    properties.put("mail.smtp.user", username);
    properties.put("mail.smtp.password", password);
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");

    // InternetAddress initialisation
    try {
        fromAddress = new InternetAddress(from);
        toAddress = new InternetAddress(to);

        // new Authenticator session
        session = (javax.mail.Session) Session.getDefaultInstance(properties, null);

    } catch (AddressException e) {
        throw new RuntimeException();
    }

    // executing mail sending
    try {
        if (from != null && to != null) {
            if (subject != null && body != null) {

                // defining message
                message = new MimeMessage(session);

                message.setFrom(fromAddress);
                message.addRecipient(Message.RecipientType.TO, toAddress);
                message.setSubject(subject);
                message.setText(body);
                message.setSentDate(new Date());
                message.setHeader("MIME-Version" , "1.0" );
                message.setHeader("Content-Type" , "text/html" );

                // Transport initialisation
                if (transport == null) {
                    transport = session.getTransport("smtp");
                    if (!transport.isConnected())                            
                    transport.connect(settingsModel.getSmtpServerAddress(),
                       settingsModel.getSmtpServerPort(), username, password);
                }

                transport.sendMessage(message, message.getAllRecipients());

            } else {
                throw new MessagingException("Subject and message of mail is empty!");
            }
        } else {
            throw new MessagingException("Address and target of mail is empty!");
        }
    } catch (MessagingException e) {
        e.printStackTrace();
        throw new RuntimeException();
    } finally {
        if (transport != null) try {
            transport.close();
        } catch (MessagingException ignore) {
        }
    }
}

}

它工作得太完美了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18216419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档