class com.sun.mail.smtp.SMTPAddressFailedException: 550 5.1.1 recipient is not exist

问题场景: 在一个系统的流程节点中 用户点击后发现查不到下一个流程节点,后台查看Linux日志,报SMTP的错误

错误原因: 由于流程走向下一个节点需要发送邮件,这个 500 5.1.1 报的是邮件地址不正确,并不存在该邮件地址,进而报发送错误。 

 

解决方案:

1、 必须查出哪个用户的邮件地址有问题,也就是必须过滤掉可用的邮件,用排除法,我这里的log日志有几百行的发送记录,如果直接找是搞不定的。

2、 我将其这几百行关于发送方法的记录copy出来,放在一个文本中,根据数据的特点,用IO进行过滤。

这里是我写的IO代码,File文件行处理即可。

public class GrepLine {

	public static void FileOperateTest() throws IOException {
		File dfile = new File("E:\\mailerror.txt");
		

		FileReader fr = new FileReader(dfile);
		BufferedReader br = new BufferedReader(fr);

		File writeFile = new File("E:\\writeFile\\" + dfile.getName());
		// 新建文件
		if (!writeFile.exists()) {
			writeFile.createNewFile();
		}

		FileWriter fw = new FileWriter(writeFile);
		BufferedWriter bw = new BufferedWriter(fw);
		int linenum = 0;
		String str = null;
		try {
			while ((str = br.readLine()) != null) {
				// 这里对每行数据进行操作
				if (str.length() > 15) {
					StringBuffer newStr = new StringBuffer();
					int i = 0;
					newStr.append("'");
					for (char c : str.toCharArray()) {
						i++;
						if (c == '@'){
							newStr.append("',");
							newStr.append(" \n ");
							break;
						}
						newStr.append(c);
						if (i > 15)
							break;
					}
					if (i < 15)
						str = newStr.toString();
					else
						str = "";
				} else
					str = "";
				bw.write(str);

				if (linenum++ == 100) {
					bw.flush();
					linenum = 0;
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			// 注意先关闭写入流 并且buffer缓存流必须最先关闭,不然就会报错,后再关闭读取流,记住先打开的后关闭
			if (bw != null)
				bw.close();
			if (fw != null)
				fw.close();

			if (fr != null)
				fr.close();
			if (br != null)
				br.close();
		}
	}

	public static void main(String[] args) {
		try {
			FileOperateTest();
			System.out.println("过滤成功!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

这样执行发现,成功发送了用户是哪些

 然后在数据库中进行过滤,你肯定知道你这个SMTP邮件错误产生取的要发送的用户列表的,我这里是从流程历史表中取的

一过滤查找,用PLSQL进行过滤

SELECT FH.APPROVER_EMP, FH.Approver_Name_Eng
  FROM FLOW_HISTORY FH
 WHERE BASE_UID = '190700000578'
   AND FH.APPROVER_DEPT = '000000003000'
   AND FH.APPROVER_NAME_ENG NOT IN
       (SELECT S.ALTERNATE_NAME
          FROM USER_DETAILS S
         WHERE S.REAL_NAME IN
               ('tcheng', 'yhuang', 'lshuang', 'wye', 'ybai', 'yzhang4',
                'ttzhou', 'tfzhou', 'cftan', 'lhyan', 'yliu1', 'jliu3',
                'apren', 'dsliao', 'sqxie', 'zlyu', 'yxzhang', 'mxliu',
                'swang', 'ylniu', 'gccheng', 'xfzeng')))

查出最终有两个用户已离职,邮箱被注销,当在该系统中他的账户仍然还在启用,在业务中涉及到他们两个人就的邮件发送就出现该 BUG了。

其实这种在中小公司是很常见的,数千人的公司,人资系统将其员工注销了,当可能未与其他的业务系统对接,其他业务系统运行该员工相关信息导致出现错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 根据引用\[1\]和引用\[2\]的描述,出现550 Invalid User错误的原因可能是在发件人设置中出现了问题。可能是将发件人的地址设置为了发件人的用户名,或者在发送请求时多加了双引号。这些错误可能导致邮件服务器无法识别发件人的地址,从而导致550 Invalid User错误。另外,根据引用\[3\]的描述,使用Spring MVC发送邮件时也可能出现这种情况,可能是在设置发件人时出现了错误。为了解决这个问题,您可以检查发件人设置的代码,确保发件人的地址正确,并且没有多余的字符或引号。另外,您还可以参考相关资料,确保使用正确的方法设置发件人的地址。 #### 引用[.reference_title] - *1* [com.sun.mail.smtp.SMTPSendFailedException: 550 Invalid User异常解决](https://blog.csdn.net/q1406689423/article/details/103578554)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [com.sun.mail.smtp.SMTPAddressFailedException: 550 Invalid User: "xxxxxxx@163.com"](https://blog.csdn.net/chenxu6/article/details/51026970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [com.sun.mail.smtp.SMTPSendFailedException: 550 Invalid User](https://blog.csdn.net/weixin_44856698/article/details/121795630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值