为什么使用465端口呢:

因为阿里云服务器以安全为由将25端口给封了,无法使用25号端口发送邮件,所以只有使用465端口啦。

实现java发送邮件的过程大体有以下几步:

1. 准备一个properties文件,该文件用于存放SMTP服务器地址等参数。

2. 利用properties创建一个Session对象

3. 利用Session创建Message对象,然后设置邮件主题,收件人及正文等信息

如果发送文本邮件,使用message.setText(content)。

如果发送html邮件,使用message.setContent(content, "text/html;charset=utf-8")。

如果发送带附件的邮件,使用message.setContent(multipart)。

multipart对象是一个用于装附件的容器。

multipart.addBodyPart(bodyPart)将附件装入multipart容器。

bodyPart是一个附件对象。

bodyPart.setDataHandler(new DataHandler(new FileDataSource("文件路径")));将文件包装成附件。

4. 利用Transport对象发送邮件

准备条件

1.两个jar包,网上到处都是随便下载。

下面两个网站有大量的jar包

http://www.manyjar.com/

http://maven.ibiblio.org/maven/

java实现邮件模板配置功能 java email_java email465

2.如果可以,就准备一个配置文件,但不准备也行,至于为什么,看代码就知道了。

java实现邮件模板配置功能 java email_java email_02

以下是使用465端口发送文本邮件和带有附件的邮件的例子。

package com.wenba1314.tools;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class EmailTool {
    //创建pro用于保存所需的数据
    public static Properties pro;
    static {
        pro = new Properties();
        try {
            /*加载配置文件,配置文件需要有
            from字段用于保存发件人账号
            password为代理密码
            注意此密码并非邮箱账户密码,而是开启客户端代理时设置的密码
            */
            pro.load(EmailTool.class.getClassLoader().getResourceAsStream("email.properties"));
        } catch (Exception e) {
            System.out.println("配置文件未找到,使用默认的账户发送!");
            pro.setProperty("from", "********@163.com");
            pro.setProperty("password", "********");
        }
        pro.setProperty("mail.smtp.ssl.enable", "true");
        pro.setProperty("mail.smtp.host", "smtp.163.com");
        pro.setProperty("mail.smtp.port", "465");
        pro.setProperty("mail.smtp.auth", "true");
        pro.setProperty("mail.debug","true");

    }
    public static void main(String[] args) {
        System.out.println(pro);
        sendTextMessage("********@qq.com","你是猪变得么","猪啊");
        sendEmailWithAttachments("********@qq.com","c:\\Users\\pc\\Desktop\\a.jpg","猪啊");
    }
    //发送普通的文本文件,一般用于网站向用户发送验证码。第一个参数为收件人地址,第二个参数为文本信息,第三个参数为邮件主题
    public static void sendTextMessage(String toEmailAddress, String content, String subject) {
        //创建session对象,第一个参数为连接邮件服务器的连接信息,第二个为身份验证的接口,重写抽象方法,参数为登陆邮件服务器的代理账号密码。
        Session session = Session.getDefaultInstance(pro, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(pro.getProperty("from"), pro.getProperty("password"));
            }
        });
        try {
            //创建消息对象
            MimeMessage message = new MimeMessage(session);
            //设置发件人
            message.setFrom(new InternetAddress(pro.getProperty("from")));
            //设置收件人
            message.addRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(toEmailAddress)});
            //设置文本主题
            message.setSubject(subject);
            //设置文本内容
            message.setText(content);
            //使用静态方法发送邮件,此静态方法包装了保存内容,连接服务器等方法。
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //发送带附件的邮件,第一个参数为收件人地址,第二个参数为附件路径,第三个参数为邮件主题
    public static void sendEmailWithAttachments(String toEmailAddress,String NameOfTheAttachment ,String subject) {
        //创建session对象,第一个参数为连接邮件服务器的连接信息,第二个为身份验证的接口,重写抽象方法,参数为登陆邮件服务器的代理账号密码。
        Session session = Session.getDefaultInstance(pro, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(pro.getProperty("from"), pro.getProperty("password"));
            }
        });
        try {
            //创建消息对象
            MimeMessage message = new MimeMessage(session);
            //设置发件人
            message.setFrom(new InternetAddress(pro.getProperty("from")));
            //设置收件人
            message.addRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(toEmailAddress)});
            //设置文本主题
            message.setSubject(subject);
            // 添加附件
            /*创建multipart对象,
            *并向其中添加邮件的各个部分内容,包括文本内容和附件,
            * 然后将此对象放入MimeMessage对象中,使用message.setContent(multipart);
            * */
            Multipart multipart = new MimeMultipart();
            if (NameOfTheAttachment != null && !"".equals(NameOfTheAttachment)) {
                // 根据路径获取文件
                FileDataSource dataSource = new FileDataSource(NameOfTheAttachment);
                //创建附件对象
                BodyPart bodyPart = new MimeBodyPart();
                //设置附件内容
                bodyPart.setDataHandler(new DataHandler(dataSource));
                //设置附件名
                //MimeUtility.encodeWord可以避免文件名乱码
                bodyPart.setFileName(MimeUtility.encodeWord(dataSource.getFile().getName()));
                //将附件放入multipart中
                multipart.addBodyPart(bodyPart );
            }
            // 将multipart放入message中
            message.setContent(multipart);
            //使用静态方法发送邮件,此静态方法包装了保存内容,连接服务器等方法。
            Transport.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}