Java使用465端口发送邮件(绕过25端口限制)
来源:互联网 发布:麻将概率分析软件 编辑:程序博客网 时间:2024/06/05 23:51
1.项目背景
此前使用25端口发送邮件时在本地可以跑,但是阿里云封掉了25端口,导致部署在阿里云上面的项目不能正常发邮件。进过比较,我选中更改端口为465解决这个问题。找阿里云官方解除25端口限制太麻烦了。
2.源码以及分析
其中的环境变量由开发,测试,生产 3种环境,我是通过不同编译环境获取到配置文件中不同的值,对应dev,test,aliyun三种。源码如下:
/** * @author licf * @since 2017-11-09 */public class SendMail implements Serializable { private final Logger logger = LoggerFactory.getLogger(getClass()); /** * 发件人使用发邮件的电子信箱服务器 * smtp.exmail.qq.com代表是qq的服务器 */ private final String SMTP_HOST = "smtp.exmail.qq.com"; private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; private String subject ; /** * 发件人的用户名 */ private String userName; /** * 发件人的邮件密码 */ private String password; /** * 发件人邮件 */ private String mailFrom; /** * 发件人昵称 */ private String nick; /** *@描述 发送邮件人的相关信息 *@参数 [userName, password, mailFrom, nick, subject] *@返回值 *@创建人 licf *@创建时间 2017/11/09 *@修改人和其它信息 */ public SendMail(String userName, String password, String mailFrom, String nick,String subject) { this.userName = userName; this.password = password; this.mailFrom = mailFrom; this.nick = nick; this.subject = subject; } /** *@描述 发送邮件方法 *@参数 [environment, mailTo, content, model] *@返回值 void *@创建人 licf *@创建时间 2017/11/9 *@修改人和其它信息 */ public void send(String environment, String mailTo, String content, String model) { try { Properties props = new Properties(); props.put("mail.smtp.host", SMTP_HOST); props.put("mail.smtp.socketFactory.class", SSL_FACTORY); props.put("mail.smtp.socketFactory.fallback", "false"); props.put("mail.smtp.port", "465"); props.put("mail.smtp.socketFactory.port", "465"); //Linux下需要设置此项,Windows默认localhost为127.0.0.1 props.put("mail.smtp.localhost", "127.0.0.1"); //鉴权验证 props.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new Authenticator(){ @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(userName, password); }}); Message msg = new MimeMessage(session); InternetAddress fromAddress = null; //设置自定义发件人昵称 if(null != nick && !"".equals(nick)){ try { nick= MimeUtility.encodeText(nick); fromAddress = new InternetAddress(nick+" <" + mailFrom + ">"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { fromAddress = new InternetAddress(mailFrom); } // 设置发件人地址信息 msg.setFrom(fromAddress); // 设置收件人地址信息 String[] to = mailTo.split(","); for(int i = 0; i < to.length;i++) { InternetAddress toAddress = new InternetAddress(to[i]); msg.addRecipient(Message.RecipientType.TO,toAddress); } //设置邮件主题 if (Constant.SERVER_ENV_UAT.equals(environment )) { msg.setSubject("【测试环境】" + model + subject); } else if(Constant.SERVER_ENV_DEV.equals(environment )){ msg.setSubject("【开发环境】" + model + subject); } else if (Constant.SERVER_ENV_PRODUCT.equals(environment )){ msg.setSubject("【生产环境】" + model + subject); }else{ logger.error("未知的环境变量"); msg.setSubject("【未知环境】" + model + subject); } // 邮件内容 msg.setText(content); //发送时间 msg.setSentDate(new Date()); Transport.send(msg); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } }}
方法的调用很简单,如下:
SendMail sendMail = new SendMail(Constant.EMAIL_USERNAME,Constant.EMAIL_PASSWORD,Constant.EMAIL_USERNAME ,Constant.EMAIL_NICK, Constant.EMAIL_INFO);
通过构造方法注入用户名,密码,发件人,昵称,主题。然后调用send方法发送邮件即可,其中MailTo是多个收件人的地址的字符串,以英文逗号分隔,也可以使用List<String>类型的返回值接收,此时只需要更改遍历发件人那块即可。
阅读全文
0 0
- Java使用465端口发送邮件(绕过25端口限制)
- Java 使用465端口发送邮件
- Spring Boot 使用465端口发送邮件
- .net 465端口发送邮件
- 使用QQ企业邮箱465端口发送邮件失败
- 使用服务器自有的25端口发送邮件(javamail)
- 阿里云服务器发送邮件失败,25端口被禁用,采用ssl 方式 465端口发送
- 使用HTTPTunnel绕过企业封端口
- 帝国cms使用465端口发邮件 教程
- 阿里云不能使用25端口发邮件功能,解决方法
- BizTalk:使用ExplorerOM创建MSMQ发送端口和接收端口
- 使用java发送邮件
- 使用java发送邮件
- 使用java发送邮件
- 使用Java 发送邮件
- 使用Java发送邮件
- 使用Java发送邮件
- 使用java发送邮件
- 使用IDA静态分析osloader.exe+Ntoskrnl.exe
- 关于Java和C#自带日期转换类的异常问题
- 输入本金和年份并算出利息本金和
- PHP双等于缺陷引发的安全问题
- Maven详解
- Java使用465端口发送邮件(绕过25端口限制)
- Unity3D-CDK兑换模拟
- 什么是Java的永久代(PermGen)内存泄漏
- 最新maven视频教程附全套软件文档源码 18课
- TensorFlow学习笔记(二):TensorFlow实现线性回归模型
- 剑指offer(算法和数据操作篇)
- codeforces 120F Spiders
- 算法基础(转载)
- Sublime Text 3技巧:支持GB2312和GBK编码