Java 发送含附件的邮件

在发送带有附件的邮件中,遇到了附件中文名乱码的问题,现已解决。只谈解决方法,具体原理解析请参考文章底部连接。html

主要遇到的问题有两个:java

  • 中文乱码
  • 中文过长致使乱码(这个通常是在超过60个字符时会出现的)

解决方案:apache

    1.解决第一个的问题是用MimeUtility.encodeText()进行解码this

attach.setName(MimeUtility.encodeText(f.getName()));

    2.解决第二个问题设置了一个系统属性(该属性最好是在声明对象前设置,否则有可能无效的).net

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

代码示例:code

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.HtmlEmail;

import javax.mail.internet.MimeUtility;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Class <code>Object</code> is the root of the class hierarchy.
 * Every class has <code>Object</code> as a superclass. All objects,
 * including arrays, implement the methods of this class.
 *
 * @author Administrator
 * @version 1.0
 * @see
 * @since JDK1.7
 * <p>
 * History
 * Created by Administrator on 2018/2/2 0002.
 */
public class MailTest {

    public static void main(String[] args) throws IOException {
        System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
        HtmlEmail email = new HtmlEmail();
        email.setHostName("邮箱主机");
        email.setAuthentication("发送者邮箱","密码");
        email.setCharset("UTF-8");
        try {
            String[] receivers = new String[]{"接收者邮箱1","接收者邮箱2"};
            for (String receiver : receivers) {
                email.addTo(receiver.trim());
            }
            email.setFrom("发送者邮箱","234234324234");
            email.setSubject("test");
            email.setMsg("<html><div style=\"background:red;\">尼玛嗨</div></html>");
            List<String> list = new ArrayList<String>();
            list.add("C:\\Users\\Administrator\\Downloads\\1111_滴滴出行发单是对方水在发送附件水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的在发送附件水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的防守打法水电费水电费水电费水电费是的电费水电费sdfsdfs是的s.pdf");
            if (!CollectionUtils.isEmpty(list)) {
                for (String attachment : list) {
                    EmailAttachment attach = new EmailAttachment();
                    File f = new File(attachment);
                    attach.setName(f.getName());
                    attach.setURL(new URL("附件连接"));
                    email.attach(attach);
                }
            }
            
            String result  = email.send();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

参考连接:htm

http://blog.csdn.net/wty19/article/details/50607411对象

http://blog.csdn.net/albert0707/article/details/69284700blog

http://blog.csdn.net/fl_zxf/article/details/60126910get

相关文章
相关标签/搜索