开发者社区> 问答> 正文

javamail 发送邮件的时候中间乱码是什么意思?:报错

使用ssl方式发送邮件的时候标题和内容中间的乱码是什么东东?求各位解答。

展开
收起
kun坤 2020-06-14 10:53:17 810 0
1 条回答
写回答
取消 提交回答
  • 应该是邮件的头文件,估计保存了一些邮件发送接收服务器之间相联系的加密信息.密钥什么的.######

    引用来自“梦无涯”的答案

    应该是邮件的头文件,估计保存了一些邮件发送接收服务器之间相联系的加密信息.密钥什么的.
    我猜也是,对了请问你有一个附件读取成二进制后发送的的经验么?
    ######

    引用来自“养不胖”的答案

    引用来自“梦无涯”的答案

    应该是邮件的头文件,估计保存了一些邮件发送接收服务器之间相联系的加密信息.密钥什么的.
    我猜也是,对了请问你有一个附件读取成二进制后发送的的经验么?

    你是想发送附件?我是用的common-email 组件,有做封装的,你有兴趣的话,可以看下它的源码吧.如果只是想实现功能的话,其实很简单的:

    /**
     * 发送邮件,包含多个附件,发件人等配置信息在email.properties中配置
     * @param addr 收件人地址
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param paths 多个附件地址
     */
    public static void sendEmail(String addr,String subject,String content,String[] paths) {
    	Pattern p = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");   
    	if(StringUtils.isBlank(addr) || !p.matcher(addr).matches()) {
    		throw new IllegalArgumentException("the addr is not a legal email addrs:" + addr);
    	}
    	
    	Map<String,String> map = EmailUtils.loadEmailConfig();
    	HtmlEmail email = new HtmlEmail();
    	try {
    		email.setHostName(map.get("email.hostname"));
    		email.setCharset(map.get("email.charset"));
    		email.addTo(addr);
    		email.setFrom(map.get("email.sender"));
    		email.setAuthentication(map.get("email.auth.user"),
    				map.get("email.auth.pwd"));
    		email.setSubject(subject);
    		email.setHtmlMsg(content);
    		/**
    		 * 添加附件
    		 */
    		for(EmailAttachment att : getAttachs(paths)) {
    			email.attach(att);
    		}
    		email.send();
    	} catch (EmailException e) {
    		e.printStackTrace();
    	}
    }
    
    private static List<EmailAttachment> getAttachs(String[]paths) {
    	List<EmailAttachment> attachs = new ArrayList<EmailAttachment>();
    	if(paths != null) {
    		for(String path : paths) {
    			EmailAttachment attach = new EmailAttachment();
    			
    			//解决附件的中文名称 乱码问题 */ 
    			String encoding = System.getProperty("file.encoding");
    			sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
    			String[] str = path.split("\\\\");
    			String title = str[str.length-1];
    			attach.setName("=?"+encoding+"?B?"+enc.encode(title.getBytes())+"?=");
    			
    			attach.setPath(path);
    			attachs.add(attach);
    		}
    	}
    	
    	return attachs;
    }

    ######这是JavaMail的版本: http://chengyue2007.iteye.com/blog/787151###### @梦无涯 不行,我要的不是这种效果。

    我的意思是。我发送一封邮件的时候附件是*.doc或者别的文件。

    然后我用二进制读取之后传一个byte数组到发送邮件的地方。

    我发送的邮件中附件是有,但是附件中全部是乱码。

    ######不太明白,你是想要读取邮件的附件么?######

    @梦无涯 不是的,先读取一个文件为二进制。

    然后把读到的二进制数组传到发送邮件的方法。最后发送出去。

    并不是读邮件的附件。这个图片是我在附件里面打开时候显示的乱码。也就是附件的内容是乱码。

    ######如果只是乱码问题,应该可以着手解决一下,程序转换一下编码格式什么的,应该可以解决吧.######乱码的话,参考下这边的解决方案吧.  http://bbs.csdn.net/topics/110144296######

    @梦无涯 这些都试过了。不行的。


    2020-06-14 10:53:22
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载