java 发送邮件

内容发送邮件算是一个很常见的功能了。总结一下相关的知识点,算是做个笔记吧,也希望能帮到一些后来者吧,虽然,网上相关的一大堆。

发送邮件主要分三个步奏:

  1. 获取一个session 对象 ;
  2. 获取一个代表邮件的对象message ;
  3. 发送邮件;

代码 (能发送文件附件):


import java.util.Date;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

public class MailUtil {
     Vector file = new Vector();// 附件文件集合  

     String filename="";

    /** 
     * <br> 
     * 方法说明:把主题转换为中文 <br> 
     * 输入参数:String strText <br> 
     * 返回类型: 
     */  
   /* public String transferChinese(String strText) {  
        try {  
            strText = MimeUtility.encodeText(new String(strText.getBytes(),  
                    "utf-8"), "utf-8", "B");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return strText;  
    }  */


    /** 
     * <br> 
     * 方法说明:往附件组合中添加附件 <br> 
     * 输入参数: <br> 
     * 返回类型: 
     */  
    public void attachfile(String fname) {  
        file.addElement(fname);  
    }  

    /** 
     * <br> 
     * 方法说明:发送邮件 <br> 
     * 输入参数: <br> 
     * 返回类型:boolean 成功为true,反之为false 
     */  
    public boolean sendMail(String host ,String sendTo ,String subject ,String content ,
            final String sendEmailName , final String sendEmailPassword) {  

        // 构造mail session  
        Properties props = new Properties() ;  
        props.put("mail.smtp.host", host); 
        // 不校验用户名密码  
        props.put("mail.smtp.auth", "false"); 
        Session session = Session.getDefaultInstance(props,  
                new Authenticator() {  
                    public PasswordAuthentication getPasswordAuthentication() {  
                        return new PasswordAuthentication(sendEmailName, sendEmailPassword);  
                    }  
                });  

        try {  
            // 构造MimeMessage 并设定基本的值  
            MimeMessage msg = new MimeMessage(session);  
            //MimeMessage msg = new MimeMessage();  
            msg.setFrom(new InternetAddress(sendEmailName));  

            //msg.addRecipients(Message.RecipientType.TO, address); //这个只能是给一个人发送email  
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(sendTo)) ; 
            //subject = transferChinese(subject);  
            msg.setSubject(MimeUtility.encodeText(subject),"gb2312"); 
            msg.setSentDate(new Date()); // 设置邮件发送日期  

            // 构造Multipart  
            Multipart mp = new MimeMultipart();  

            // 向Multipart添加正文  
            MimeBodyPart mbpContent = new MimeBodyPart();  
            mbpContent.setContent(content, "text/html;charset=gb2312"); 

            // 向MimeMessage添加(Multipart代表正文)  
            mp.addBodyPart(mbpContent);  

            // 向Multipart添加附件  
            Enumeration efile = file.elements();  
            while (efile.hasMoreElements()) {  

                MimeBodyPart mbpFile = new MimeBodyPart();  
                filename = efile.nextElement().toString();  
                FileDataSource fds = new FileDataSource(filename);  
                mbpFile.setDataHandler(new DataHandler(fds));  
                String filename= new String(fds.getName().getBytes(),"gb2312");  
                mbpFile.setFileName(MimeUtility.encodeText(filename));  
                // 向MimeMessage添加(Multipart代表附件)  
                mp.addBodyPart(mbpFile);  
            }  

            file.removeAllElements();  
            // 向Multipart添加MimeMessage  
            msg.setContent(mp);  
            msg.setSentDate(new Date());  
            msg.saveChanges() ;  
            // 发送邮件  
            Transport transport = session.getTransport("smtp");  
            //transport.connect(host, sendEmailName, sendEmailPassword);   // 校验发送方用户名密码
            transport.connect(); //不校验发送方用户名与密码
            transport.sendMessage(msg, msg.getAllRecipients());  
            transport.close();  
        } catch (Exception mex) {  
            mex.printStackTrace();  
            return false;  
        }  
        return true;  
    }  


    public static void main(String[] args) {
        MailUtil mail = new MailUtil();
        mail.sendMail("smtp.163.com", "396524@qq.com", "subject", "testContent", "test@163.com", "");

    }

}

说明 :

  1. mail.host : stmp服务器类型,163 邮箱配置smtp.163.com。设置为QQ邮箱时请注意去开通STMP 功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值