使用Java邮件,我想发送电子邮件并检查状态。可能的状态包括:
是否有可能以上述方式发送电子邮件并获得有关交付尝试的反馈?
编辑:受访者建议寻找提供与ListNanny相同功能的Java库。我四处搜寻,但没找到任何东西。不知道这样的图书馆是否存在?
干杯, 唐
答案 0 :(得分:5)
您无法可靠或一致地执行此操作。如果您的本地邮件服务器将其传递到公司外出邮件服务器,然后当该服务器尝试传递它时它会弹回,会发生什么?如果邮件服务器无法与其他邮件服务器通信,然后邮件在4天后超时,会发生什么情况?
答案 1 :(得分:4)
如果您要发送HTML电子邮件,则可能需要在电子邮件中嵌入1像素的透明图像。图像URL实际上将引用返回图像的servlet。 URL也会有某种消息ID作为参数。 这背后的想法是,当用户阅读消息时,他/她会显示图像,该图像会触发您的servlet,该图像会向数据库写入已读取消息的信息。
答案 2 :(得分:3)
您需要做的是将信封SMTP发件人设置为您监控NDR邮件的地址。你必须在他们进来时解析电子邮件并弄清楚出了什么问题。这通常用于邮件列表,而像ListNanny这样的产品用于处理消息(它是一个.NET产品,但我确定有一个Java等价物,或者你可以自己编写)。
信封“from”与消息“from”地址不同。它是您的代码和MTA之间发生的SMTP会话的一部分。所有NDR都将被发送到该地址。
答案 3 :(得分:1)
查找邮件服务器并连接:简单。检查帐户:可能。但这取决于您是否首先访问邮件服务器。它可能会拒绝您的连接尝试(例如,因为您的网络被列入黑名单)
最复杂的是你称之为“成功”:
简短回答:不。
答案很长:从理论上讲,这是可能的,但如果不是几天就必须等待数小时才知道状态。使用灰名单,白名单,阻止垃圾邮件的邮件服务器,许多人只会在多次传递尝试后接受电子邮件。只有当他们最终交付或放弃邮件时,您才会知道交付成功。根据邮件服务器的负载,发送电子邮件可能会被推迟一段时间。
答案 4 :(得分:1)
我并不特别熟悉Javamail,但我会这样说:即使“成功”也许并不成功。
您对硬性和软性故障的定义应该足够简单,以便检查。如果你找不到服务器很难,如果你连接并且服务器说“找不到邮箱”它就是“软”。但是,如果服务器接受该消息然后稍后将其退回,该怎么办?许多前端服务器接受未知消息,无论是设计还是必要(“实际”后端服务器的前端中继),如果稍后发现消息被发送到无效地址,则消息将被退回给发送方。在这种情况下,当发送真的不成功时,你会报告发送“成功”。
确保交付几乎不可能在消息中嵌入某种“点击此处”。
答案 5 :(得分:1)
不要依赖你从服务器获得的信息(如果你回来)。
现在,许多邮件服务器都设置为不,指示收件人是否存在,因为它创建了安全漏洞。 (例如,如果某个域报告(“是”/“否”)存在电子邮件地址,黑客就会在服务器上释放字典攻击以确定所有有效用户,从而获得即时垃圾邮件列表。
答案 6 :(得分:1)
您可以使用 http://www.mailcounter.info 免费服务来检查您的电子邮件是否已被阅读以及用户已阅读的次数。它是免费服务。
答案 7 :(得分:1)
您应该做的是实际检查收件人电子邮件的MX记录(电子邮件地址的域部分的DNS MX查询),并通过已解析的SMTP服务器发送邮件。
这样,如果找不到MX记录,你会得到一个“硬弹跳”,如果找到它但是send方法抛出一个异常,你得到一个“软弹跳”,如果它通过 - 你得到一个“成功”。
您可以使用dnsjava项目来解析MX记录。 http://www.dnsjava.org/
答案 8 :(得分:0)