使用Spring发送Email

本文介绍了如何在Spring框架中配置邮件服务,并通过Velocity模板引擎生成邮件内容。具体包括配置JavaMailSenderImpl来发送邮件、设置邮件服务器参数、定义邮件模板等步骤。

1.配置bean

import java.util.Properties;

import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.ui.velocity.VelocityEngineFactoryBean;

@Configuration
@ComponentScan("com.zhaowq")
@PropertySource("classpath:config.properties")
public class MailConfig {

    @Bean
    public JavaMailSenderImpl mailSender(Environment env) {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(env.getProperty("mailserver.host"));
        mailSender.setPort(Integer.parseInt(env.getProperty("mailserver.port")));
        mailSender.setUsername(env.getProperty("mailserver.username"));
        mailSender.setPassword(env.getProperty("mailserver.password"));
        mailSender.setProtocol("smtp");
        Properties prop = new Properties();
        **prop.setProperty("mail.smtp.auth", "true");**
        mailSender.setJavaMailProperties(prop);
        return mailSender;
    }

    @Bean
    public VelocityEngineFactoryBean velocityEngine() {
        VelocityEngineFactoryBean velocityEngine = new VelocityEngineFactoryBean();
        Properties properties = new Properties();
        properties.setProperty("resource.loader", "class");
        properties.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
        velocityEngine.setVelocityProperties(properties);
        return velocityEngine;
    }
}

2.装配和使用邮件发送器

import java.util.HashMap;
import java.util.Map;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.apache.velocity.app.VelocityEngine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.ui.velocity.VelocityEngineUtils;

import com.zhaowq.spring.service.MailService;

@Service
public class MailServiceImpl implements MailService {
    @Autowired
    private JavaMailSender mailSender;

    @Autowired
    private VelocityEngine velocityEngine;

    @Override
    public void findPassword(String userName, String password, String email) {
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("userName", userName);
        model.put("password", password);
        String emailText = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "emailTemplate.vm", "UTF-8", model);

        MimeMessage msg = mailSender.createMimeMessage();
        MimeMessageHelper helper;
        try {
            helper = new MimeMessageHelper(msg, true, "UTF-8");

            helper.setFrom("myemail@163.com");
            helper.setTo(email);
            helper.setSubject("Find password");
            helper.setText(emailText, true);
            mailSender.send(msg);
        } catch (MessagingException e) {
            Exceptions.makeThrow(ErrorConstants.EMAIL_SEND_FAIL);
        }
    }
}

该段代码使用了Velocity构建了邮件模板,emailTemplate.vm代码如下:

<html>
<body>
    亲爱的${userName}:<br><br>
 &nbsp;&nbsp;&nbsp;&nbsp;您的密码信息已重置:<br><br>
 &nbsp;&nbsp;&nbsp;&nbsp;登录名:${userName}<br><br>
 &nbsp;&nbsp;&nbsp;&nbsp;新密码:${password}<br><br>
 &nbsp;&nbsp;&nbsp;&nbsp;建议你收到邮件后尽快修改密码<br><br>
</body>
</html>
Spring框架中,可借助`JavaMailSender`来在`main`方法里实现邮件发送。下面给出一个示例代码,展示如何在`main`方法中运用Spring框架发送邮件: ```java import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import java.util.Properties; @Configuration class AppConfig { @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); mailSender.setHost("smtp.example.com"); // 设置SMTP服务器地址 mailSender.setPort(587); // 设置SMTP服务器端口 mailSender.setUsername("your_email@example.com"); // 设置发件人邮箱 mailSender.setPassword("your_email_password"); // 设置发件人邮箱密码 Properties props = mailSender.getJavaMailProperties(); props.put("mail.transport.protocol", "smtp"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.debug", "true"); return mailSender; } } public class Main { public static void main(String[] args) { // 创建Spring上下文 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 获取JavaMailSender实例 JavaMailSender mailSender = context.getBean(JavaMailSender.class); // 创建简单邮件消息 SimpleMailMessage message = new SimpleMailMessage(); message.setFrom("your_email@example.com"); // 设置发件人邮箱 message.setTo("recipient_email@example.com"); // 设置收件人邮箱 message.setSubject("Test Email"); // 设置邮件主题 message.setText("This is a test email sent from Spring framework."); // 设置邮件正文 // 发送邮件 mailSender.send(message); // 关闭Spring上下文 context.close(); } } ``` 在这个示例中: 1. 首先定义了一个`AppConfig`类,使用`@Configuration`注解将其标记为配置类,并且定义了`javaMailSender`方法,该方法会创建并配置`JavaMailSender`实例。 2. 在`main`方法里,创建了`AnnotationConfigApplicationContext`来加载配置类。 3.Spring上下文中获取`JavaMailSender`实例。 4. 创建`SimpleMailMessage`对象,设置发件人、收件人、主题和正文。 5. 调用`mailSender.send(message)`方法来发送邮件。 6. 最后关闭Spring上下文。 需要注意,要把`smtp.example.com`、`your_email@example.com`、`your_email_password`和`recipient_email@example.com`替换成实际的SMTP服务器地址、发件人邮箱、发件人邮箱密码以及收件人邮箱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值