精华内容
下载资源
问答
  • java邮件发送

    万次阅读 2020-12-11 14:08:40
    设置同时发送多个好友 // 设置邮件标题 message.setSubject(title); // 设置邮件内容 message.setText(text); // 得到邮差对象 Transport transport = session.getTransport(); // 连接自己的邮箱账户 transport....

    pom依赖:

    <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.0</version>
        </dependency>
    

    发送邮件类:

    import com.alibaba.fastjson.JSONObject;
    
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.ProtocolException;
    import java.net.URL;
    import java.util.Properties;
    
    public class start {
    
        public void sendmail_ray(String title, String text, String address) throws UnsupportedEncodingException, MessagingException {
            Properties properties = new Properties();
            properties.put("mail.transport.protocol", "smtp");// 连接协议
            properties.put("mail.smtp.host", "smtp.xxx.com");// 主机名发件服务器
            properties.put("smtp.xxx.com", 465);// 发件服务器端口号
            properties.put("mail.smtp.auth", "true");
            properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
            properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
            // 得到回话对象
            Session session = Session.getInstance(properties);
            // 获取邮件对象
            Message message = new MimeMessage(session);
            // 设置发件人邮箱地址
            message.setFrom(new InternetAddress("xxx@xxx.com"));
            // 设置收件人邮箱地址
            message.setRecipients(Message.RecipientType.TO,
                    new InternetAddress[]{new InternetAddress(address)});
            //new InternetAddress();设置同时发送多个好友
            // 设置邮件标题
            message.setSubject(title);
            // 设置邮件内容
            message.setText(text);
            // 得到邮差对象
            Transport transport = session.getTransport();
            // 连接自己的邮箱账户
            transport.connect("xxx@xxx.com", "xxx*57@");// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
            // 发送邮件
            int i = 0;
            transport.sendMessage(message, message.getAllRecipients());
            System.out.println("成功!");
            transport.close();
        }
    
        public static void main(String[] args) {
            //帆哥
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            new start().sendmail_ray("帆哥好", "帆哥辛苦了", "xxx@xxx.com");
                            Thread.sleep(3000);
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        } catch (MessagingException e) {
                            e.printStackTrace();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
    
            //斌哥
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            new start().sendmail_ray("xxx", "斌哥辛苦了", "xxx@xxx.com");
                            Thread.sleep(3000);
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        } catch (MessagingException e) {
                            e.printStackTrace();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
    
        }
    }
    
    展开全文
  • JAVA邮件发送

    2015-01-13 16:56:54
    JAVA邮件发送   JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用...

    转:http://www.cnblogs.com/codeplus/archive/2011/10/30/2229391.html

     

     

    JAVA邮件发送

     

    JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。

    JavaMail可以到http://www.oracle.com/technetwork/java/javamail/index-138643.html进行下载,并将mail.jar添加到classpath即可。如果你使用的是JAVA EE SDK,则可以在C:\glassfishv3\glassfish\modules\mail.jar找到所需的jar包,同样需要添加的classpath。

    JAVA邮件发送的大致过程是这样的的:

    1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。

    2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。

    3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。

    4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。

    5、使用javax.mail.Transport工具类发送邮件。

    展开全文
  • Java邮件发送

    千次阅读 2013-05-10 22:13:46
    Java邮件发送,下面的是简单的邮件发送代码,邮件服务器配置在mailServer.properties文件里面。通过简单的文本邮件发送方式发送邮件,暂未使用html格式的邮件发送方式。 javax.mail.jar下载地址:...
    Java邮件发送,下面的是简单的邮件发送代码,邮件服务器配置在mailServer.properties文件里面。通过简单的文本邮件发送方式发送邮件,暂未使用html格式的邮件发送方式。
    javax.mail.jar下载地址:http://www.oracle.com/technetwork/java/javamail/index.html

    注:常用发送邮件服务器名称及端口
    163 smtp.163.com 25
    126 smtp.126.com 25
    qq smtp.qq.com 25 //注:若提示“发送邮件错误 454 Authentication failed, please open smtp flag first! ”,在QQ邮箱的设置里面,找到账户-》POP3/IMAP/SMTP选择开启POP3/SMTP服务
    139 smtp.139.com或smtp.10086.cn 25 //注:454 Authentication failed

    mailServer.properties属性文件代码如下:

    mailServerHost=smtp.163.com
    mailServerPort=25
    authValidate=true
    userName=test@163.com
    userPassword= testtest
    fromAddress=test@163.com
    fromUserName=\u663E\u793A\u6211\u54C8\u54C8
    上面几个参数是邮件服务器的配置文件,mailServerHost 为 发送邮件的服务器的IP,mailServerPort 为 发送邮件的服务器端口,userName 为  登陆邮件发送服务器的用户名,userPassword 为  登陆邮件发送服务器的密码,fromAddress 为 邮件发送者的地址,fromUserName 为  邮件发送者的名称即显示在他人邮件的发件人,authValidate 为  是否需要身份验证。

    MailInfo.java代码如下,主要定义邮件基本信息:

    package com.hsinghsu.test;
    
    import java.util.Properties;
    
    /**
     * 邮件信息类
     * @author HsingHsu
     *
     */
    public class MailInfo {
    	private String mailServerHost; // 发送邮件的服务器的IP
    	private String mailServerPort = "25"; // 发送邮件的服务器端口
    	private String userName; // 登陆邮件发送服务器的用户名
    	private String userPassword; // 登陆邮件发送服务器的密码
    	private String fromAddress; // 邮件发送者的地址
    	private String toAddress; // 邮件接收者的地址
    	private String fromUserName; // 邮件发送者的名称,显示在他人邮件的发件人
    	private String mailSubject; // 邮件主题
    	private String mailContent; // 邮件的文本内容
    	private boolean authValidate = false; // 是否需要身份验证
    	private Properties properties; // 邮件会话属性
    
    	public String getMailServerHost() {
    		return mailServerHost;
    	}
    
    	public void setMailServerHost(String mailServerHost) {
    		this.mailServerHost = mailServerHost;
    	}
    
    	public String getMailServerPort() {
    		return mailServerPort;
    	}
    
    	public void setMailServerPort(String mailServerPort) {
    		this.mailServerPort = mailServerPort;
    	}
    
    	public String getUserName() {
    		return userName;
    	}
    
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    
    	public String getUserPassword() {
    		return userPassword;
    	}
    
    	public void setUserPassword(String userPassword) {
    		this.userPassword = userPassword;
    	}
    
    	public String getFromAddress() {
    		return fromAddress;
    	}
    
    	public void setFromAddress(String fromAddress) {
    		this.fromAddress = fromAddress;
    	}
    
    	public String getToAddress() {
    		return toAddress;
    	}
    
    	public void setToAddress(String toAddress) {
    		this.toAddress = toAddress;
    	}
    
    	public String getMailSubject() {
    		return mailSubject;
    	}
    
    	public void setMailSubject(String mailSubject) {
    		this.mailSubject = mailSubject;
    	}
    
    	public String getMailContent() {
    		return mailContent;
    	}
    
    	public void setMailContent(String mailContent) {
    		this.mailContent = mailContent;
    	}
    	
    	public String getFromUserName() {
    		return fromUserName;
    	}
    
    	public void setFromUserName(String fromUserName) {
    		this.fromUserName = fromUserName;
    	}
    
    	public boolean isAuthValidate() {
    		return authValidate;
    	}
    
    	public void setAuthValidate(boolean authValidate) {
    		this.authValidate = authValidate;
    	}
    
    	public Properties getProperties() {
    		Properties p = new Properties();
    		p.put("mail.smtp.host", this.mailServerHost);
    		p.put("mail.smtp.port", this.mailServerPort);
    		p.put("mail.smtp.auth", authValidate ? "true" : "false");
    		return p;
    	}
    
    	public void setProperties(Properties properties) {
    		this.properties = properties;
    	}
    
    }
    

    MailAuthenticator.java代码如下,主要是服务器用户的认证:

    package com.hsinghsu.test;
    
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    
    /**
     * 用来进行服务器对用户的认证
     * @author HsingHsu
     *
     */
    public class MailAuthenticator extends Authenticator {
    	String userName;
    	String userPassword;
    
    	public MailAuthenticator() {
    		super();
    	}
    
    	public MailAuthenticator(String user, String pwd) {
    		super();
    		userName = user;
    		userPassword = pwd;
    	}
    
    	public PasswordAuthentication getPasswordAuthentication() {
    		return new PasswordAuthentication(userName, userPassword);
    	}
    
    }
    
    MailSender.java代码如下,主要用于邮件发送:
    package com.hsinghsu.test;
    
    import java.io.UnsupportedEncodingException;
    import java.util.Date;
    import java.util.Properties;
    
    import javax.mail.Address;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    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;
    
    /**
     * 发送邮件
     * @author HsingHsu
     *
     */
    public class MailSender {
    	
    	//发送邮件[邮件内容为文本格式]
    	public boolean sendMail(MailInfo mailInfo) {
    		// 判断是否需要身份认证
    		MailAuthenticator authenticator = null;
    		Properties pro = mailInfo.getProperties();
    		if (mailInfo.isAuthValidate()) {
    			// 如果需要身份认证,则创建一个密码验证器
    			authenticator = new MailAuthenticator(mailInfo.getUserName(),
    					mailInfo.getUserPassword());
    		}
    		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
    		Session sendMailSession = Session
    				.getDefaultInstance(pro, authenticator);
    		try {
    			Message mailMessage = new MimeMessage(sendMailSession); // 根据session创建一个邮件消息
    			Address from = new InternetAddress(mailInfo.getFromAddress(),mailInfo.getFromUserName()); // 创建邮件发送者地址
    			Address to = new InternetAddress(mailInfo.getToAddress()); // 创建邮件的接收者地址,并设置到邮件消息中
    			mailMessage.setFrom(from); // 设置邮件消息的发送者
    			mailMessage.setRecipient(Message.RecipientType.TO, to);
    			mailMessage.setSubject(mailInfo.getMailSubject()); // 设置邮件消息的主题
    			mailMessage.setSentDate(new Date()); // 设置邮件消息发送的时间
    			mailMessage.setText(mailInfo.getMailContent());// 设置邮件消息的主要内容
    
    			Transport.send(mailMessage); // 发送邮件
    			System.out.println("send ok!");
    			return true;
    		} catch (MessagingException ex) {
    			ex.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return false;
    	}
        //邮件内容为html格式
        public static boolean sendHtmlMail(MailInfo mailInfo) {
    		// 判断是否需要身份认证
    		MailAuthenticator authenticator = null;
    		Properties pro = mailInfo.getProperties();
    		// 如果需要身份认证,则创建一个密码验证器
    		if (mailInfo.isAuthValidate()) {
    			authenticator = new MailAuthenticator(mailInfo.getUserName(),
    					mailInfo.getUserPassword());
    		}
    		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
    		Session sendMailSession = Session
    				.getDefaultInstance(pro, authenticator);
    		try {
    
    			Message mailMessage = new MimeMessage(sendMailSession);// 根据session创建一个邮件消息
    			Address from = new InternetAddress(mailInfo.getFromAddress());// 创建邮件发送者地址
    			mailMessage.setFrom(from);// 设置邮件消息的发送者
    			Address to = new InternetAddress(mailInfo.getToAddress());// 创建邮件的接收者地址,并设置到邮件消息中
    			mailMessage.setRecipient(Message.RecipientType.TO, to);// Message.RecipientType.TO属性表示接收者的类型为TO
    			mailMessage.setSubject(mailInfo.getMailSubject());// 设置邮件消息的主题
    			mailMessage.setSentDate(new Date());// 设置邮件消息发送的时间
    			Multipart mainPart = new MimeMultipart();// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
    			BodyPart html = new MimeBodyPart();// 创建一个包含HTML内容的MimeBodyPart
    			html.setContent(mailInfo.getMailContent(),
    					"text/html; charset=utf-8");// 设置HTML内容
    			mainPart.addBodyPart(html);
    			mailMessage.setContent(mainPart);// 将MiniMultipart对象设置为邮件内容
    			Transport.send(mailMessage);// 发送邮件
    			return true;
    		} catch (MessagingException ex) {
    			ex.printStackTrace();
    		}
    		return false;
    	}
    }
    
    MailTest.java主要用于邮件发送测试:
    package com.hsinghsu.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class MailTest {
    
    	public static void main(String[] args) {
    		
    		//以下参数从properties文件读取
    		String mailServerHost = null; // 发送邮件的服务器的IP
    		String mailServerPort = null; // 发送邮件的服务器端口
    		String userName = null; // 登陆邮件发送服务器的用户名
    		String userPassword = null; // 登陆邮件发送服务器的密码
    		String fromAddress = null; // 邮件发送者的地址
    		String fromUserName = null; // 邮件发送者的名称,显示在他人邮件的发件人
    		boolean authValidate = false; // 是否需要身份验证
    		
    		InputStream in = Object.class.getResourceAsStream("/mailServer.properties"); 
    		Properties prop = new Properties();
    		try {
    			prop.load(in);
    			mailServerHost = prop.getProperty("mailServerHost").trim();
    			mailServerPort = prop.getProperty("mailServerPort").trim();
    			userName = prop.getProperty("userName").trim();
    			userPassword = prop.getProperty("userPassword").trim();
    			fromAddress = prop.getProperty("fromAddress").trim();
    			fromUserName = prop.getProperty("fromUserName").trim();
    			authValidate = prop.getProperty("authValidate").trim().equalsIgnoreCase("true");
    		} catch (IOException e) {
    			System.out.println("读取邮箱服务配置文件出错");
    			e.printStackTrace();
    		} 
    		
    		MailInfo mailInfo = new MailInfo();
    		mailInfo.setMailServerHost(mailServerHost);//"smtp.163.com"
    		mailInfo.setMailServerPort(mailServerPort);//"25"
    		mailInfo.setAuthValidate(authValidate);//true
    		mailInfo.setUserName(userName);//"test@163.com"
    		mailInfo.setUserPassword(userPassword);// "test"
    		mailInfo.setFromAddress(fromAddress);//"test@163.com"
    		mailInfo.setFromUserName(fromUserName);//"显示我哈哈"
    		
    		mailInfo.setToAddress("666666@qq.com");//666666@qq.com
    		mailInfo.setMailSubject("邮件标题是这个");
    		mailInfo.setMailContent("邮件内容是这个");
    		// 这个类主要来发送邮件
    		MailSender sms = new MailSender();
    		sms.sendMail(mailInfo);// 发送文体格式
    	}
    
    }
    

    展开全文
  • 基于JavaMail的Java邮件发送:简单邮件发送

    万次阅读 多人点赞 2016-06-14 21:56:35
    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。...本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发...

    本文链接: https://blog.csdn.net/xietansheng/article/details/51673073

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

    1. 电子邮件协议

    电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

    2. JavaMail

    我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载,这里我从 JavaEE 官方的 Github 仓库下载。

    JavaMail 下载地址: https://github.com/javaee/javamail/releases

    这里我下载的版本是 1.6.0 版本,包含了 SMTP, IMAP, 和 POP3 协议的实现的 jar 包:

    javaxmail.png

    我把 JavaMail 1.6.0 的 jar 包上传到了 CSDN,如果无法从 Github 下载,可以从 CSDN 下载(建议到Github下载,CSDN上我设了积分): http://download.csdn.net/download/xietansheng/9928266

    特别注意:

    • 本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用 JavaMail 1.6.0 版本再进行尝试。
    • 使用 JavaMail 1.6.0 要求的 JDK 版本必须是 JDK 1.7 以上(建议使用最新版 JDK)。
    • 不要直接就完完全全复制我的代码,需要 修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送(自己也不要反复发送内容相同的邮件),内容一致的邮件多次发送,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

    有些童鞋反应代码提示某些类找不到,或运行出现问题,往往都是 JDK 版本过低,或 JavaMail 版本过低,出现问题时 请使用推荐的版本

    再出现问题,只要能连接成功,都有错误码返回,有些童鞋发送失败在控制台已经给出了错误码,大部分还给出了查看错误码含义的链接,点开链接,查询对应的错误码,为什么失败,已经明明白白的告诉你了,针对失败原因修改即可!

    邮件发送,涉及多端(本地代码端、邮件发送服务器端、邮件接收服务器端),保证自己的代码没问题了,不一定就能成功,你把你的邮件提交到邮件发送服务器,发送的服务器可以给你拒绝服务(比如认为发送的内容是垃圾广告,或者你频繁请求发送),这不是代码端能管的事情,但都有错误码返回,明确告诉你为什么错误。就算你发送成功了,对方也有可能接收不到,成功发送到对方的邮件接收服务器后,对方的服务器可以根据你的内容拒绝收你的邮件(比如认为你的内容是广告诈骗等信息,或者发送过于频繁),对方的服务器可能直接把你的邮件扔垃圾箱,或者直接忽略。出现这些问题,请修改发送的标题、内容、昵称等,重复的内容不要反复发送,或多更换收件箱和发件箱试试!!!

    3. 创建一封简单的电子邮件

    首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程,这里不多说。

    邮件创建步骤:

    1. 创建一个邮件对象(MimeMessage);
    2. 设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
    3. 设置邮件的主题(标题);
    4. 设置邮件的正文(内容);
    5. 设置显示的发送时间;
    6. 保存到本地。

    代码实现:

    package com.xiets.javamaildemo;
    
    import javax.mail.Session;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.Date;
    import java.util.Properties;
    
    /**
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     */
    public class Main {
    
        public static void main(String[] args) throws Exception {
            // 1. 创建一封邮件
            Properties props = new Properties();
            // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
            Session session= Session.getInstance(props);        // 根据参数配置,创建会话对象(为了发送邮件准备的)
            MimeMessage message = new MimeMessage(session);     // 创建邮件对象
    
            /*
             * 也可以根据已有的eml邮件文件创建 MimeMessage 对象
             * MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));
             */
    
            // 2. From: 发件人
            //    其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
            //    真正要发送时, 邮箱必须是真实有效的邮箱。
            message.setFrom(new InternetAddress("aa@send.com", "USER_AA", "UTF-8"));
    
            // 3. To: 收件人
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("cc@receive.com", "USER_CC", "UTF-8"));
            //    To: 增加收件人(可选)
            message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
            //    Cc: 抄送(可选)
            message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
            //    Bcc: 密送(可选)
            message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "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();
    
            // 8. 将该邮件保存到本地
            OutputStream out = new FileOutputStream("MyEmail.eml");
            message.writeTo(out);
            out.flush();
            out.close();
        }
    
    }
    

    保存的 MyEmail.eml 可以使用邮件客户端打开查看,实际上就是一堆符合SMTP协议格式的文本(内容使用base64进行了编码),也可用记事本打开,如下所示:

    my-email.png

    my-email-txt.png

    4. 发送电子邮件

    发送邮件首先需要有一个邮箱账号和密码,本文以网易163邮箱为例,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,如下所示(其他邮箱大同小异):

    smtp-163-setting.jpg

    代码实现:

    package com.xiets.javamaildemo;
    
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Date;
    import java.util.Properties;
    
    /**
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     */
    public class Main {
    
        // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
        // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”), 
        //     对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
        public static String myEmailAccount = "xxxxxxxxx@163.com";
        public static String myEmailPassword = "xxxxxxxxx";
    
        // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
        // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
        public static String myEmailSMTPHost = "smtp.163.com";
    
        // 收件人邮箱(替换为自己知道的有效邮箱)
        public static String receiveMailAccount = "xxxxxxxxx@qq.com";
    
        public static void main(String[] args) throws Exception {
            // 1. 创建参数配置, 用于连接邮件服务器的参数配置
            Properties props = new Properties();                    // 参数配置
            props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
            props.setProperty("mail.smtp.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);
            */
    
            // 2. 根据配置创建会话对象, 用于和邮件服务器交互
            Session session = Session.getInstance(props);
            session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
    
            // 3. 创建一封邮件
            MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
    
            // 4. 根据 Session 获取邮件传输对象
            Transport 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);
    
            // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(message, message.getAllRecipients());
    
            // 7. 关闭连接
            transport.close();
        }
    
        /**
         * 创建一封只包含文本的简单邮件
         *
         * @param session 和服务器交互的会话
         * @param sendMail 发件人邮箱
         * @param receiveMail 收件人邮箱
         * @return
         * @throws Exception
         */
        public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
            // 1. 创建一封邮件
            MimeMessage message = new MimeMessage(session);
    
            // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
            message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8"));
    
            // 3. To: 收件人(可以增加多个收件人、抄送、密送)
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
    
            // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
            message.setSubject("打折钜惠", "UTF-8");
    
            // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
            message.setContent("XX用户你好, 今天全场5折, 快来抢购, 错过今天再等一年。。。", "text/html;charset=UTF-8");
    
            // 6. 设置发件时间
            message.setSentDate(new Date());
    
            // 7. 保存设置
            message.saveChanges();
    
            return message;
        }
    
    }
    

    发送后查看收件人的收件箱:

    sended-email.jpg


    包含文本、图片、附件 的复杂邮件的创建请看下一篇:基于 JavaMail 的 Java 邮件发送:复杂邮件发送


    展开全文
  • java 邮件发送

    2018-07-30 15:40:10
    邮件发送 刚来公司时比较忙,现在有空把项目中用到的技术整理下,邮件发送现在各个地方都会用到,比如注册,修改密码,广告推送等等。之前网上也有很多种实现方式,我们使用的是javax.mail实现邮件发送。 发送...
  • java 邮件发送 可带附件 java 邮件发送 可带附件 java 邮件发送 可带附件
  • Java邮件发送.zip

    2018-10-26 11:27:38
    Java发送邮件,亲自测试,没有问题。目前支持简单Java邮件发送
  • java邮件发送程序,java邮件服务器,直接作为服务器发送邮件
  • 简单Java邮件发送 上传的文件中有一个Jar包和demo源码
  • java 邮件发送测试

    2011-08-15 11:46:25
    java 邮件发送测试java 邮件发送测试java 邮件发送测试
  • Spring邮件发送服务(java邮件发送),支持多附件、多人发送/抄送/暗送
  • 基于JavaMail的Java邮件发送:复杂邮件发送

    万次阅读 多人点赞 2016-06-20 23:11:52
    上一篇文章 基于 JavaMail 的 Java 邮件发送:简单邮件发送 讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。 一封复杂的邮件内容...
  • Java 邮件发送源码

    2010-08-04 10:41:52
    Java邮件发送源码Java邮件发送源码
  • java邮件发送组件

    2009-04-21 12:37:09
    java邮件发送组件,邮件群发组件java邮件发送组件,邮件群发组件java邮件发送组件,邮件群发组件java邮件发送组件,邮件群发组件java邮件发送组件,邮件群发组件
  • java邮件发送工具类

    2015-10-09 16:00:01
    java邮件发送工具类
  • java 邮件发送功能

    2012-08-06 19:31:50
    本资源实现java邮件发送功能,根据项目需要可以连接发送邮件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,838
精华内容 5,535
关键字:

java邮件发送

java 订阅