javaMail发送邮件

1. 使用原生javaMail API发送邮件

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

public class test {

    public static void main(String[] args) {
        Properties props = new Properties();
        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "mail.smtp_server.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");
        // 设置环境信息
        Session session = Session.getInstance(props);
        // 创建邮件对象
        Message msg = new MimeMessage(session);
        try {
            msg.setSubject("这是邮件标题");
            msg.setText("这是邮箱内容!");
            msg.setFrom(new InternetAddress("email_from@163.com","***系统(发件昵称)"));
            Transport transport = session.getTransport();
            // 连接邮件服务器
            transport.connect("email_from@163.com", "email_password");
            // 发送邮件
            transport.sendMessage(msg, new Address[] {new InternetAddress("email_to@163.com")});
            // 关闭连接
            transport.close();


        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

    }
}

第二种方式

public static void main(String[] args) throws Exception {
        // 1. 创建一封邮件
        Properties props = new Properties();
        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "mail.你的SMTP服务器地址.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");

        //这个很重要***************************************** START
        //第二个参数为验证信息返回器
        //即Authenticator对象会返回验证信息(用户名,密码等信息)
        //这里的Authenticator是一个匿名内部类
        Session session = Session.getInstance(props,
                new Authenticator(){
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        //返回发件人账号与密码信息
                        return new PasswordAuthentication("登录邮箱@163.com","登录密码");
                    }
                }
        );

        MimeMessage message = new MimeMessage(session);     // 创建邮件对象
        //这个很重要***************************************** END
        
        // 2. From: 发件人
        //    其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
        //    真正要发送时, 邮箱必须是真实有效的邮箱。
        message.setFrom(new InternetAddress("发件人Email@163.com", "发件人昵称", "UTF-8"));

        // 3. To: 收件人
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("收件人@163.com", "昵称", "UTF-8"));
        //    To: 增加收件人(可选)
        message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("增加收件人@qq.com", "昵称", "UTF-8"));
        //    Cc: 抄送(可选)
        message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("添加抄送人@163.com", "昵称", "UTF-8"));
        //    Bcc: 密送(可选)
        message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("秘密抄送人@163.com", "昵称", "UTF-8"));
        // 4. Subject: 邮件主题
        message.setSubject("TEST邮件主题", "UTF-8");
        // 5. Content: 邮件正文(可以使用html标签)
        message.setContent("TEST这是邮件正文。。。", "text/html;charset=UTF-8");
        // 6. 设置显示的发件时间
        message.setSentDate(new Date());
        // 7. 保存前面的设置
        message.saveChanges();
        
        //发送*********************************************
        Transport transport = session.getTransport();
        transport.send(message);

        // 8. 将该邮件保存到本地
        OutputStream out = new FileOutputStream("/Users/**/Documents/dev/MyEmail.eml");
        message.writeTo(out);
        out.flush();
        out.close();

    }

2. 携带附件

MimeMultipart msgMultipart = new MimeMultipart("mixed");//混合的组合关系
        MimeBodyPart attch1 = new MimeBodyPart();
        File fileI = new File("/Users/**/Documents/dev/fileTest/a.txt");
        DataSource ds1 = new FileDataSource(fileI);
        DataHandler dh1 = new DataHandler(ds1);
        attch1.setDataHandler(dh1);
        //设置第一个附件的文件名
        attch1.setFileName("file.txt");

        msgMultipart.addBodyPart(attch1);
        message.setContent(msgMultipart);

3. 用文件流(InputStream)作为邮件附件附件

String str = "String与InputStream相互转换";
        InputStream   in   =   new   ByteArrayInputStream(str.getBytes());
        DataSource dataSource1=new ByteArrayDataSource(in, "application/text");
        DataHandler dh1 = new DataHandler(dataSource1);
        attch1.setDataHandler(dh1);
        //设置附件的文件名
        attch1.setFileName("file.txt");

        msgMultipart.addBodyPart(attch1);
        message.setContent(msgMultipart);

4. 添加多个收件人(message.setRecipients())

MimeMessage的setRecipients方法设置邮件的收件人,其中

Message.RecipientType.TO常量表示收件人类型是邮件接收者,

Message.RecipientType.CC常量表示收件人类型是抄送者,

Message.RecipientType.BCC常量表示收件人的类型是密送着。

InternetAddress[] toall;
        InternetAddress to1 = new InternetAddress("***@163.com","张三","UTF-8");
        InternetAddress to2 = new InternetAddress("***@qq.com","李四","UTF-8");
        toall = new InternetAddress[]{to1, to2};

        // 3. To: 收件人
        message.setRecipients(MimeMessage.RecipientType.TO, toall);
        //    To: 增加收件人(可选)
        //    Cc: 抄送(可选)
        message.setRecipients(MimeMessage.RecipientType.CC, toall);
        //    Bcc: 密送(可选)
        message.setRecipients(MimeMessage.RecipientType.BCC, toall);

5. 保存本地

OutputStream out = new FileOutputStream("/Users/**/Documents/dev/MyEmail.eml");
        message.writeTo(out);
        out.flush();
        out.close();

6. 基于spring框架发送邮件

maven依赖

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.2.6.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>mail</artifactId>
      <version>1.4.7</version>
    </dependency>

Bean配置文件:这里把一个第三方库变成一个可以spring依赖注入的Bean!

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="bb.aa.com"></property>
        <property name="username" value="aa@qq.com"></property>
        <property name="password" value="123654"></property>
    </bean>

添加测试类

@ContextConfiguration(locations = {"classpath:testConfig.xml"})先加载配置文件,创建上下文,然后上下文会帮创建我们在其中配置的bean!

@Autowired
 private JavaMailSender mailSender;//注入Bean,然后就可以非常方便的使用了!

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:testConfig.xml"})
public class SpringTest {
 @Autowired
 private TestService testService;
 @Autowired
 private JavaMailSender mailSender;
    @Test
    public void test(){
        SimpleMailMessage mail = new SimpleMailMessage();
        mail.setTo("aa@qq");//收件人邮箱地址
        mail.setFrom("bb@qq");//收件人
        mail.setSubject("使用spring Email");//主题
        mail.setText("这是spring Email的正文!");//正文
        mailSender.send(mail);
    }

}

 

转载于:https://my.oschina.net/u/3697586/blog/1600985

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值