您的位置:首页 > 编程语言 > Java开发

java邮件发送

2018-01-15 15:06 127 查看
以下是java代码实现的邮件发送功能。

// 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)

    // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),

    // 对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。

    public static String myEmailAccount = "*@*.cn";

    public static String myEmailPassword = "*";

    public static boolean flag =false;

    

    public static String fileInfo = "";

    // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.exmail.qq.com

    // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com

    public static String myEmailSMTPHost = "smtp.163.com";

    public static String file = "";

    // 收件人邮箱(替换为自己知道的有效邮箱)

    public static String receiveMailAccount = "*@qq.com";

    public static void main(String[] args) throws GeneralSecurityException {

        // 1. 创建参数配置, 用于连接邮件服务器的参数配置

        Properties props = new Properties();                    // 参数配置

        props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)

        props.setProperty("mail.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址

        props.setProperty("mail.smtp.auth", "true");            // 需要请求认证

        // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),

        // 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,

        // 打开下面 之间的注释代码, 开启 SSL 安全连接。

        // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,

        // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,

        // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)

        // final String smtpPort = "465";

        // props.setProperty("mail.smtp.port", smtpPort);

        // props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

        // props.setProperty("mail.smtp.socketFactory.fallback", "false");

        // props.setProperty("mail.smtp.socketFactory.port", smtpPort);

        MailSSLSocketFactory sf = new MailSSLSocketFactory();

        sf.setTrustAllHosts(true);

        props.put("mail.smtp.ssl.enable", "true");

        props.put("mail.smtp.ssl.socketFactory", sf);

        System.getProperties().setProperty("mail.mime.splitlongparameters", "false");

        // 2. 根据配置创建会话对象, 用于和邮件服务器交互

        Session session = Session.getDefaultInstance(props);

        //session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log

        // 3. 创建一封邮件

        MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);

        // 4. 根据 Session 获取邮件传输对象

        Transport transport;

        try {

            transport = session.getTransport();

            // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错

            //

            // PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,

            // 仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误

            // 类型到对应邮件服务器的帮助网站上查看具体失败原因。

            //

            // PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:

            // (1) 邮箱没有开启 SMTP 服务;

            // (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;

            // (3) 邮箱服务器要求必须要使用 SSL 安全连接;

            // (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;

            // (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。

            //

            // PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。

            // transport.connect(myEmailAccount, myEmailPassword);

            transport.connect(myEmailSMTPHost, myEmailAccount, myEmailPassword);

            // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人

            transport.sendMessage(message, message.getAllRecipients());

            flag=true; 

            System.out.println(file);

            System.out.println(flag);

            System.out.println(fileInfo);

            // 7. 关闭连接

            transport.close();

        } catch (NoSuchProviderException e) {

            // TODO Auto-generated catch block<
9c4c
br />
            e.printStackTrace();

        } catch (MessagingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail){

        // 1. 创建一封邮件

        MimeMessage message = new MimeMessage(session);

         

        // 2. From: 发件人

        try {

            message.setFrom(new InternetAddress(sendMail, "*", "UTF-8"));

         // message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail,

            // "XX用户", "UTF-8"));

            // 3. To: 多个收件人

            String[] addressTo = new String[] { "*@qq.com" };

            /*String[] addressCo = new String[] { "*@qq.com","*@qq.com" };

            String[] addressMo = new String[] { "*@qq.com","*@qq.com" };*/

            String toList = null;

            String toListcs = null; 

            String toListms = null; 

            // InternetAddress[] sendTo = (InternetAddress[]) address.toArray();

            if (addressTo != null && addressTo.length>0) {

                toList = getMailList(addressTo);

                InternetAddress[] iaToList = new InternetAddress().parse(toList);

                message.setRecipients(MimeMessage.RecipientType.TO, iaToList); // 收件人

            }

            // To: 多个抄送人

            /*if (addressCo != null && addressCo.length>0) {

                toListcs = getMailList(addressCo);

                InternetAddress[] iaToListcs = new InternetAddress().parse(toListcs);

                message.setRecipients(MimeMessage.RecipientType.CC, iaToListcs); // 抄送人

            }

            // To: 多个密送人

            if (addressMo != null && addressMo.length>0) {

                toListms = getMailList(addressMo);

                InternetAddress[] iaToListms = new InternetAddress().parse(toListms);

                message.setRecipients(MimeMessage.RecipientType.BCC, iaToListms); // 密送人

            }*/

            // 4. Subject: 邮件主题

            message.setSubject("来自XXX的问候", "UTF-8");

            MimeBodyPart attached1BodyPart = getAttachedBodyPart("C:/Users/wangweiyi/Desktop/*/*V3.3.xlsx","*V3.3.xlsx");// 注意附件名是中文的

            //MimeBodyPart attached2BodyPart = getAttachedBodyPart("D:\\SunlineGdfamcProject\\gdfamc_project_gzl\\uploadFiles\\uploadOfficeFile\\111.png");// 注意附件名是中文的

            MimeBodyPart textBodyPart = new MimeBodyPart(); // 用来设置正文的

            // 5. Content: 邮件正文

            textBodyPart.setText("测试多附件....");

            MimeMultipart mmp = new MimeMultipart();

            mmp.addBodyPart(attached1BodyPart);

            //mmp.addBodyPart(attached2BodyPart);

            mmp.addBodyPart(textBodyPart);

            message.setContent(mmp);

            // 6. 设置发件时间

            message.setSentDate(new Date());

            // 7. 保存设置

            message.saveChanges();

        } catch (AddressException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (MessagingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (UnsupportedEncodingException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } 

        return message;

    }

源码如下(带有邮箱校验的功能):

http://download.csdn.net/download/qq_30270931/10206328
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: