使用Javax.mail(stmp协议)发送邮件快速转换成Exchange(EWS协议)工具类 解决报错Couldn‘t connect to host, port: ~;timeout -1;

*错误描述

报错信息: Couldn't connect to host, port: 10.10.10.10,333;timeout -1

邮件发送失败 

*解决方式

方式一:

核对host,port的配置是不是正确的 尝试更换可用的主机端口号

方式二:

这也是本篇文章要说的.

需求说明: 由于主机端口号已经失效 并且无法修复 所以需要更换邮件的发送协议(stmp->ews)使用EWS协议发送 但是要改动的代码量过去庞大 且客户急需所以采用这种取巧的方式

1.创建装换工具类


import javax.mail.Address;
import javax.mail.Message;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;

//注意: 原有代码不要改变
@Component
public class EWSEmailUtil {


    private static String user;

    private static String password;

    private static String mailServer;


    //发送邮件
    public void send(Message message,String bodyText,String attachmentName,String attachmentPath){
        try {
            String subject = message.getSubject();
            Address[] toAddress = message.getRecipients(Message.RecipientType.TO);
            String[] to = new String[toAddress.length];
            for (int i = 0; i < toAddress.length; i++) {
                to[i]=toAddress[i].toString();
            }

            Address[] ccAddress = message.getRecipients(Message.RecipientType.CC);
            String[] cc = null;
            if (ccAddress!=null){
                cc = new String[ccAddress.length];
                for (int i = 0; i < ccAddress.length; i++) {
                    cc[i]=ccAddress[i].toString();
                }
            }
            if (attachmentPath == null){
                //发送不带附件的邮件
                doSend(subject,to,cc,bodyText,null,null);
            }else {
                //发送带有附件的邮件
                doSend(subject,to,cc,bodyText,attachmentName,attachmentPath);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void doSend(String subject, String[] to, String[] cc, String bodyText,String attachmentName, String attachmentPath) throws Exception {
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        ExchangeCredentials credentials = new WebCredentials(user, password);
        service.setCredentials(credentials);

        try {
            service.setUrl(new URI(mailServer));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        EmailMessage msg = new EmailMessage(service);
        msg.setSubject(subject);
        MessageBody body = MessageBody.getMessageBodyFromText(bodyText);
        body.setBodyType(BodyType.HTML);
        msg.setBody(body);
        for (String s : to) {
            msg.getToRecipients().add(s);
        }
        if (cc != null) {
            for (String s : cc) {
                msg.getCcRecipients().add(s);
            }
        }
        if (attachmentPath!=null){
            //这里只提供单个附件的方法 如果你需要多个邮件 循环遍历你懂得!
            msg.getAttachments().addFileAttachment(attachmentName,attachmentPath);
        }
        msg.send();
    }
}

需要的依赖就自己搜一下好了

2.向原有发送邮件方法中注入工具类

@Autowired
private EWSEmailUtil ewsEmailUtil;

当然你也可以把方法改成静态的 (如果你的工具类中不依赖其他的类)

3.替换发送方法

//  Transport.send(message);

注释以上代码 替换为

ewsEmailUtil.send(message,bodytext,attachmentName,attachmentPath);

最好重构代码 可以应急

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值