JavaMail如何别名发送邮件

在钓鱼邮件的欺骗中,最常用的手法就是为邮件发送人添加别名,如果邮件发送人的名称跟邮件接收人熟悉的别名相近的话,那钓鱼成功率要提升一倍。

1. 简单邮件

JAVA使用JavaMail工具包进行邮件发送,其MAVAN依赖如下:

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-context-supportartifactId>
    <version>1.5.6version>
dependency>

所有的邮件服务器都采用SMTP协议,进行邮件发送,以新浪的免费邮箱为例,完整的JavaMailSender配置代码如下:

@Bean
public JavaMailSenderImpl mailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setDefaultEncoding("UTF-8");
    mailSender.setHost("smtp.sina.com");
    //  替换为自己的用户名,这里不能添加别名
    mailSender.setUsername("[email protected]");
    //  替换为自己的密码
    mailSender.setPassword("******");
    mailSender.setProtocol("smtp");
    mailSender.setPort(25);
    return mailSender;
}

添加别名的位置在MailMessage中,也就是邮件模板,如下:

@Bean
public SimpleMailMessage emailMessage() {
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom("IT服务中心");
    message.setSubject("测试邮件");
    return message;
}

可以看出,操作非常简单,格式是“别名<邮件地址>”,并且支持中文名称。

2. 多媒体邮件

上述的方法只适合于简单的文本邮件,如果要加载多媒体内容,那么上述的方法会报错,错误信息如下:

com.sun.mail.smtp.SMTPSendFailedException: 553 Envolope sender mismatch with header from..
    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2267)
    at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:2045)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1260)
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:448)

解决办法比较麻烦,必须要对别名进行编码,代码如下:

String from = "[email protected]";
String alias = "";    
try {
    //  必须要进行编码
    alias=javax.mail.internet.MimeUtility.encodeText("IT服务中心");    
} catch (UnsupportedEncodingException e) {    
    e.printStackTrace();    
}     
mm.setFrom(new InternetAddress(alias + " <"+from+">")); 

赶紧去试试吧,据我发现,向企业内网发送邮件,往往具有更好的效果。

你可能感兴趣的:(java)