Java通过QQ邮箱发送邮件

Java通过QQ邮箱发送邮件

使用了javamail1_4_5的包。测试QQ邮箱可用。


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
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;

import com.sun.mail.util.MailSSLSocketFactory;

/**
 * 邮件发送工具,可以群发,抄送,添加附件
 * 
 * @author JW.XIN
 * 
 */
public class MailTool {
    /**
     * 设置debug模式
     */
    private boolean debug = false;

    /**
     * 发件人昵称
     */
    private String personalName = "JW.XIN";

    /**
     * 发送邮件
     * 
     * @param host
     *            邮件发送服务器
     * @param subject
     *            主题
     * @param userName
     *            用户名
     * @param pwd
     *            密码
     * @param to
     *            收件人,多个用英文逗号隔开
     * @param copyto
     *            抄送,多个用英文逗号隔开
     * @param text
     *            正文
     * @param fileName
     *            附件详细路径数组
     */
    public void send(String host, String subject, String userName, String pwd,
            String to, String copyto, String text, String[] fileName) {
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.auth", "true");
        MailSSLSocketFactory sf;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable", "true");
            props.put("mail.smtp.ssl.socketFactory", sf);
        } catch (GeneralSecurityException e1) {
            e1.printStackTrace();
        }
        try {
            PopupAuthenticator auth = new PopupAuthenticator(userName, pwd);
            Session session = Session.getInstance(props, auth);
            session.setDebug(debug);
            MimeMultipart mp = new MimeMultipart();// Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象
            MimeMessage message = new MimeMessage(session);
            Address addressFrom = new InternetAddress(userName, personalName);
            if (subject == null)
                subject = "无主题";
            message.setSubject(subject);
            message.setFrom(addressFrom);
            message.addRecipients(Message.RecipientType.TO, InternetAddress
                    .parse(to));
            if (copyto != null && !copyto.equals("")) {// 如果有抄送
                message.addRecipients(Message.RecipientType.CC, InternetAddress
                        .parse(copyto));
            }
            BodyPart bpText = new MimeBodyPart();
            bpText.setContent(text, "text/html;charset=GBK");
            mp.addBodyPart(bpText);
            // message.setText(text);
            if (fileName != null && fileName.length > 0) {// 如果有附件
                try {
                    for (String str : fileName) {
                        if (str == null || str.equals(""))
                            continue;
                        BodyPart bp = new MimeBodyPart();
                        FileDataSource fileds = new FileDataSource(str);
                        bp.setDataHandler(new DataHandler(fileds));
                        bp
                                .setFileName(MimeUtility.encodeText(fileds
                                        .getName()));
                        mp.addBodyPart(bp);
                    }
                } catch (Exception e) {
                    System.err.println("增加邮件附件:" + fileName + "发生错误!" + e);
                    e.printStackTrace();
                }
            }
            message.setContent(mp);
            message.saveChanges();
            Transport transport = session.getTransport("smtp");
            String mailuser = userName.split("@")[0];
            transport.connect(host, mailuser, pwd);
            Transport.send(message);
            transport.close();
            System.out.println("mail send success");
        } catch (Exception e) {
            System.err.println("mail send fail");
            e.printStackTrace();
        }
    }

    public boolean isDebug() {
        return debug;
    }

    public void setDebug(boolean debug) {
        this.debug = debug;
    }

    public String getPersonalName() {
        return personalName;
    }

    public void setPersonalName(String personalName) {
        if (personalName == null)
            return;
        this.personalName = personalName;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值