MailSender和SimpleMailMessage的基本用法

1、Spring发送邮件依赖于JavaMail和JAF的两个库文件:mail.jar和activation.jar

2、Spring提供的发送电子邮件的高级抽象层,向用户屏蔽了底层邮件系统的一些细节,同时代表客户端负责底层资源的处理

3、MailSender和SimpleMailMessage的基本用法:

首先定义一个借口:

package com.mail.service;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 12-6-12
 * Time: 下午3:37
 * To change this template use File | Settings | File Templates.
 */
public interface OrderManager {

    void placeOrder() ;
}

 实现类:

package com.mail.sender;

import com.mail.demo.Order;
import com.mail.service.OrderManager;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 12-6-12
 * Time: 下午3:39
 * To change this template use File | Settings | File Templates.
 */
public class SimpleOrderManager implements OrderManager {

    private MailSender mailSender ;

    private SimpleMailMessage simpleMailMessage ;

    public void setMailSender(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {
        this.simpleMailMessage = simpleMailMessage;
    }

    public void placeOrder() {

        SimpleMailMessage simpleMailMessage1 = new SimpleMailMessage(this.simpleMailMessage); //SimpleMailMessage只能用来发送text格式的邮件
        simpleMailMessage1.setTo("XXX@qq.com");
        simpleMailMessage1.setText("hello,world");
        try{
            this.mailSender.send(simpleMailMessage1);
        }
        catch (MailException e){
            System.out.println(e.getMessage());
        }

    }
}

实现类完成了,要注入他的两个属性MailSender和SimpleMailMessage,配置如下:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="smtp.qq.com"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="username" value="XXXX@qq.com"/>
        <property name="password" value="XXXXX"/>
        <property name="javaMailProperties">
            <value>
                mail.smtp.auth=true
            </value>
        </property>
    </bean>

这里是mailSender的注入,MailSender是发送邮件的主要接口,Spring为它提供的一个子接口,即:org.springframework.mail.javamail.JavaMailSender,在他的实现类中有用来发送邮件的一些配置:

host是邮箱的host,这里的是qq,username是发邮件的邮箱账号,password是密码等属性

<bean id="templateMessage" class="org.springframework.mail.SimpleMailMessage">
    <property name="from" value="XXX@qq.com"/>
    <property name="subject" value="welcome"/>
    </bean>

 SimpleMailMessage是值对象,封装了一些简单的属性,如from、to、subject、text等等,SimpleMailMessage只能用来发送text格式的邮件

注入SimpleOrderMessage对象:

 <bean id="orderManager" class="com.mail.sender.SimpleOrderManager">
        <property name="mailSender" ref="mailSender"/>
        <property name="simpleMailMessage" ref="templateMessage"/>
    </bean>
 

来测试一下:

public class MailTest {

    @Test
    public void main1(){
        BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring-config.xml") ;

        SimpleOrderManager simpleOrderManager = (SimpleOrderManager)
                beanFactory.getBean("orderManager");
        simpleOrderManager.placeOrder();
    }
}

 运行一下就会看到邮件


`SimpleMailMessage` 是 Spring 框架提供的一个用于发送邮件的简单封装类。它提供了一系列设置邮件基本信息的方法,例如发件人、收件人、邮件主题邮件内容等。然而,需要注意的是,`SimpleMailMessage` 类本身并不支持直接添加附件,它主要用于发送纯文本邮件。 如果你需要发送带有多个附件的邮件,你应该使用 `MimeMessage` 类,它是 JavaMail API 提供的一个更高级的邮件消息对象。以下是一个使用 `MimeMessage` 创建并发送带附件的邮件的简单示例: ```java import javax.mail.internet.MimeMessage; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.MimeUtility; import java.util.Properties; // 邮件发送者、接收者、邮件服务器的相关信息 String from = "from@example.com"; String to = "to@example.com"; String host = "smtp.example.com"; // 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("mail.smtp.host", host); properties.setProperty("mail.smtp.port", "465"); properties.setProperty("mail.smtp.ssl.enable", "true"); properties.setProperty("mail.smtp.auth", "true"); // 获取默认的 Session 对象 Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username", "password"); } }); try { // 创建默认的 MimeMessage 对象 MimeMessage message = new MimeMessage(session); // 设置 From: 头部头字段 message.setFrom(new InternetAddress(from)); // 设置 To: 头部头字段 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 设置 Subject: 头部头字段 message.setSubject("This is the Subject Line!"); // 创建消息内容 BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("This is actual message"); // 创建多部分消息 Multipart multipart = new MimeMultipart(); // 将文本部分添加到多部分消息中 multipart.addBodyPart(messageBodyPart); // 附加多个文件 BodyPart messageBodyPartFile = new MimeBodyPart(); DataSource source = new FileDataSource("path/to/your/attachment1.jpg"); messageBodyPartFile.setDataHandler(new DataHandler(source)); messageBodyPartFile.setFileName(MimeUtility.encodeText(source.getName())); multipart.addBodyPart(messageBodyPartFile); // 可以继续添加更多附件 // ... // 将多部分消息对象设置到消息对象中 message.setContent(multipart); // 发送消息 Transport.send(message); System.out.println("Sent message successfully...."); } catch (MessagingException mex) { mex.printStackTrace(); } ``` 在上面的代码中,我们首先配置了邮件服务器的相关信息,并创建了一个 `MimeMessage` 实例。我们设置了发件人收件人,并创建了一个 `MimeMultipart` 对象来表示邮件内容。在这个多部分消息对象中,我们首先添加了一个文本类型的 `MimeBodyPart`,然后又添加了一个文件类型的 `MimeBodyPart` 作为附件。可以继续添加更多的附件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值