邮箱在本地可正常发送,在云服务器无法发送邮件,


Sending the email to the following server failed : smtp.hjnsz.com:25

使用腾讯企业邮箱发送邮箱验证,一直报无法连接服务器,端口25禁用,

TIM图片20190624172855.png更换端口即可

import java.util.Properties;

import javax.mail.MessagingException;

import javax.mail.NoSuchProviderException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import java.util.Date;


public class MailSendingKit {


public static String account="";//发件人账户

public static String password ="";//发件人密码

public static String emailSMTPHost="smtp.hjnsz.com";//服务器地址

/**

     *  纯文本邮件发送

     * @param receiveAccount    收件人邮箱

     * @param msg    发送内容

     * @return

     * @throws Exception

     */


public static void sendMail(String receiveAccount,String msg){

//1.创建参数配置, 用于连接邮件服务器的参数配置

Properties properties = new Properties(); // 参数配置

properties.setProperty("mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求)

properties.setProperty("mail.smtp.host", emailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址

properties.setProperty("mail.smtp.auth", "true"); // 需要请求认证

//ssl连接

                final String smtpPort = "465";

                properties.setProperty("mail.smtp.port", smtpPort);

                properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

                properties.setProperty("mail.smtp.socketFactory.fallback", "false");

                properties.setProperty("mail.smtp.socketFactory.port", smtpPort);

//2.根据配置创建会话对象, 用于和邮件服务器交互

Session session = Session.getDefaultInstance(properties);

session.setDebug(true);     //设置为debug模式, 可以查看详细的发送 log

//3.创建一封邮件

MimeMessage message = null;

try {

message = createMimeMessage(session, account, receiveAccount,msg);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 4. 根据 Session 获取邮件传输对象

Transport transport = null;

try {

transport = session.getTransport();

} catch (NoSuchProviderException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错

try {

transport.connect(account, password);

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人

try {

transport.sendMessage(message, message.getAllRecipients());

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

// 7. 关闭连接

try {

transport.close();

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

     * 创建一封只包含文本的简单邮件

     *

     * @param session 和服务器交互的会话

     * @param sendMail 发件人邮箱

     * @param receiveMail 收件人邮箱

     * @return

     * @throws Exception

     */

public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail,String msg) throws Exception {

        // 1. 创建一封邮件

        MimeMessage message = new MimeMessage(session);

        // 2. From: 发件人

        message.setFrom(new InternetAddress(sendMail, "JMIS数据管理平台", "UTF-8"));

        // 3. To: 收件人(可以增加多个收件人、抄送、密送)

        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "JMIS用户", "UTF-8"));

        // 4. Subject: 邮件主题

        message.setSubject("JMIS数据管理平台业务请求", "UTF-8");

        // 5. Content: 邮件正文(可以使用html标签)

        message.setContent(msg, "text/html;charset=UTF-8");

        // 6. 设置发件时间

        message.setSentDate(new Date());

        // 7. 保存设置

        message.saveChanges();

        return message;

    }


评论区

JFinal

2019-06-24 17:40

这个问题的原因是不是 端口 25 被禁用,换个端口号就可以了?

cmo

2019-06-24 17:46

阿里回话:不支持本机25解封,建议您尝试使用外部用剑服务商的465加密端口,或者查询所访问发信服务是否提供其他SMTP端口。如果使用的是阿里企邮或邮件推送,支持80和465端口发送,请将25更换为80端口。

JFinal

2019-06-24 18:15

@cmo 使用 465 为好,80 要用于 http

热门分享

扫码入社