java-邮件发送
最近在项目的注册模块需要发送邮件,因此,简单的调研了下java中的邮件发送。
一种简单的方式是直接使用JavaMail架包。其Maven依赖如下:
<dependency>
<groupId>commons-email</groupId>
<artifactId>commons-email</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.5.0</version>
</dependency>
接下来就可以写一个简单的测试函数来测试邮件的发送与接受了。
public void sendEamil(String from, String password, String sendTo, String msg){
Email simpleEmail = new SimpleEmail();
simpleEmail.setCharset("utf8");
simpleEmail.setHostName("smtp.163.com");
simpleEmail.setAuthentication(from, password);
simpleEmail.setSmtpPort(25);
try {
simpleEmail.setSubject("测试");
simpleEmail.setMsg(msg);
simpleEmail.setFrom(from);
simpleEmail.addTo(sendTo);
simpleEmail.send();
} catch (EmailException e) {
e.printStackTrace();
}
}
其中,from和password分别是发送者的邮箱名和密码,sendTo是接收者的邮箱地址,msg是发送邮件的内容。我使用的发送邮箱是163邮箱,发送前需要去邮箱中开通smtp服务。
因为项目使用的Play框架,因此,还尝试了在play框架中发送邮件。
首先,在application.conf中设置smtp、发送者的邮箱地址和密码等。
mail.smtp.host=smtp.163.com
mail.smtp.user=
mail.smtp.pass=
mail.smtp.channel=ssl
接下来调用编写一个发送函数的方法,方法中调用了Play的Email类来发送邮件,邮件的相关属性存储在mail.properties文件中。
public static void sendValidateEmail(String email, String username) {
SimpleEmail sendEmail = new SimpleEmail();
sendEmail.setCharset("utf8");
SimpleDateFormat formater = new SimpleDateFormat("yyyy年MM月dd日");
String time =formater.format(new Date());
Properties prop = new Properties();
try {
prop.load(AccountManagement.class.getClassLoader()
.getResourceAsStream("mail.properties"));
} catch (IOException e1) {
e1.printStackTrace();
}
try {
sendEmail.setSubject(prop.getProperty("subject"));
content = “hello Email”;
sendEmail.setMsg(content);
sendEmail.setFrom(prop.getProperty("from"));
sendEmail.addTo(email);
Mail.send(sendEmail);
//System.out.println("121212345667777777");
} catch (EmailException e) {
e.printStackTrace();
}
}
但是,很遗憾没有接受到邮件,也没有报错。目前正在找原因,还请熟悉play框架的大牛指导一二。