热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个使用smtp发送邮件的问题

2019独角兽企业重金招聘Python工程师标准使用smtp.163.com发送邮件,参考:https:www.cnblogs.comtohxyb

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

使用smtp.163.com发送邮件,参考:https://www.cnblogs.com/tohxyblog/p/6593654.html

登录邮箱做好设置之后,代码如下:

@Testpublic void testSendEmail() throws Exception {Properties prop = new Properties();prop.setProperty("mail.transport.protocol", "smtp"); //协议prop.setProperty("mail.smtp.host", "smtp.163.com"); //主机名smtp.163.comprop.setProperty("mail.smtp.auth", "true"); //是否开启权限控制prop.setProperty("mail.debug", "true"); //返回发送的cmd源码Session session = Session.getInstance(prop);Message msg = new MimeMessage(session);msg.setFrom(new InternetAddress("zhustar520@163.com")); //自己的emailmsg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("goethe007@163.com")); // 要发送的email,可以设置数组msg.setSubject("装修问题咨询"); //邮件标题msg.setText("请问你们装修一次多少钱");//邮件正文//不被当作垃圾邮件的关键代码--Begin ,如果不加这些代码,发送的邮件会自动进入对方的垃圾邮件列表msg.addHeader("X-Priority", "3");msg.addHeader("X-MSMail-Priority", "Normal");msg.addHeader("X-Mailer", "Microsoft Outlook Express 6.00.2900.2869"); //本文以outlook名义发送邮件,不会被当作垃圾邮件msg.addHeader("X-MimeOLE", "Produced By Microsoft MimeOLE V6.00.2900.2869");msg.addHeader("ReturnReceipt", "1");//不被当作垃圾邮件的关键代码--endTransport trans = session.getTransport();//密码不是邮箱登录密码,是客户端授权密码trans.connect("zhustar520@163.com", "******"); // 邮件的账号密码trans.sendMessage(msg, msg.getAllRecipients());}

这段逻辑在本地运行只要内容没有被163服务器退信,就没有问题。但在阿里云服务器上,不管是杭州的还是香港的,都会有连接超时的问题,由于在阿里云服务器上部署了nginx,前端会返回一个504错误。查看nginx的log(/usr/local/nginx/logs/error.log)发现有:

2019/05/14 16:06:46 [error] 16039#0: *137116 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 60.176.118.119, server: localhost, request: "POST /zk/alarmConfig/sendEmail?emial=undefined HTTP/1.1", upstream: "http://127.0.0.1:9999/alarmConfig/sendEmail?emial=undefined", host: "esl.zkong.com:8888", referrer: "http://esl.zkong.com:8888/"
 

归根到底还是由于方法本身的调用超时,排除nginx的问题。搜了一下“阿里云 smtp”发现阿里云的服务器将向外访问25的端口封了,需要使用465端口和ssl通信,参考:https://blog.csdn.net/liouxl0623/article/details/65446662

使用代码:

&#64;Testpublic void testSslSend() {try{AgencyAlarmConfig agencyAlarmConfig &#61; new AgencyAlarmConfig();agencyAlarmConfig.setAccount("zhustar520&#64;163.com");agencyAlarmConfig.setPassword("******");agencyAlarmConfig.setSendServer("smtp.163.com");agencyAlarmConfig.setTestMail("goethe007&#64;163.com");agencyAlarmConfig.setMailTitle("真不巧");Assert.assertTrue(sslSend(agencyAlarmConfig, "嘿嘿"));} catch (Exception e) {Assert.fail();}}private boolean sslSend(AgencyAlarmConfig agencyAlarmConfig, String content)throws AddressException, MessagingException, IOException {Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());final String SSL_FACTORY &#61; "javax.net.ssl.SSLSocketFactory";// Get a Properties objectProperties props &#61; new Properties();props.setProperty("mail.smtp.host", agencyAlarmConfig.getSendServer());props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.port", "465");props.setProperty("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.auth", "true");final String username &#61; agencyAlarmConfig.getAccount();final String password &#61; agencyAlarmConfig.getPassword();Session session &#61; Session.getDefaultInstance(props, new Authenticator(){&#64;Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}});Message msg &#61; new MimeMessage(session);// 设置发件人和收件人msg.setFrom(new InternetAddress(agencyAlarmConfig.getAccount()));List tos &#61; new ArrayList<>();tos.add(agencyAlarmConfig.getTestMail());Address to[] &#61; new InternetAddress[tos.size()];for(int i&#61;0;i

由此可在阿里云的香港&#xff0c;杭州服务器发送&#xff0c;对于封端口&#xff0c;阿里云的回应&#xff1a;

去年9月底开始&#xff0c;出于上级对垃圾邮件管控的要求&#xff0c;新购VPC服务器限制了25端口&#xff0c;我们建议您使用邮件服务商的加密465端口。 或者您查询下所希望访问的发信服务是否提供了像阿里云企业邮箱一样的重定向25端口&#xff0c;这样不用解封25端口也可以发信。阿里云企业邮箱将80端口重定向到了25端&#xff0c;与直接调用25端的发信方式没有区别。 如果您仅用于本地发信&#xff0c;可尝试使用阿里企邮 smtp 80 端口。smtp.mxhichina.com 80

 


转:https://my.oschina.net/u/4042451/blog/3049594



推荐阅读
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
author-avatar
农夫三拳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有