1.需求
公司有个需求要将频繁登录服务器的ip地址及时进行邮件和短信报警,故要写一个发送邮件和短信的程序
2.问题描述
从网上down了一些java代码,不是较为理想,大部分都使用javamail来实现,发送到网易邮箱没什么问题,但qq邮箱不行,网易邮箱接收到邮件后提醒不及时,安装了360邮箱通后还是不太理想,故还是要解决发送到QQ邮箱的问题
3.解决
最新QQ邮箱机制要将输入密码的地方改成开启pop3/smtp的时候提供的验证码 即可
4.代码
发送到QQ邮箱
private static boolean send_qqmail(String strMail, String strTitle, String strText){
boolean bret = false;
try
{
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.user", "xxxxxxx@qq.com");
props.put("mail.password", "xxxxx");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.starttls.enable", "true");
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
Session mailSession = Session.getInstance(props, authenticator);
MimeMessage message = new MimeMessage(mailSession);
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
InternetAddress to = new InternetAddress(strMail);
message.setRecipient(RecipientType.TO, to);
message.setSubject(strTitle);
message.setContent(strText, "text/html;charset=UTF-8");
Transport.send(message);
bret = true;
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
return bret;
}
发送到网易邮箱
private static boolean send_163mail(String strMail, String strTitle, String strText){
boolean bret = false;
try
{
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.163.com");
props.put("mail.user", "xxx@163.com");
props.put("mail.password", "xxxx");
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
Session mailSession = Session.getInstance(props, authenticator);
MimeMessage message = new MimeMessage(mailSession);
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
InternetAddress to = new InternetAddress(strMail);
message.setRecipient(RecipientType.TO, to);
message.setSubject(strTitle);
message.setContent(strText, "text/html;charset=UTF-8");
Transport.send(message);
bret = true;
}
catch (AddressException e) {
e.printStackTrace();
}
catch (MessagingException e) {
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
return bret;
}
测试部分
import java.util.Properties
import javax.mail.Authenticator
import javax.mail.Message.RecipientType
import javax.mail.MessagingException
import javax.mail.internet.AddressException
import javax.mail.PasswordAuthentication
import javax.mail.Session
import javax.mail.Transport
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage
public static void main(String[] args) {
// TODO Auto-generated method stub
if (send_qqmail("xxxxx@qq.com", "测试QQ邮箱发送", "<body><p>你们好吗</p></body>"))
System.out.println("QQ邮件发送成功")
if (send_163mail("xxxx@163.com", "测试网易邮箱发送", "<body><p>你们好吗</p></body>"))
System.out.println("网易邮件发送成功")
}
参考文章