Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java、电子邮件和如何捕获未发送的邮件_Java_Email_Exim - Fatal编程技术网

Java、电子邮件和如何捕获未发送的邮件

Java、电子邮件和如何捕获未发送的邮件,java,email,exim,Java,Email,Exim,我有一个通过本地主机Exim4邮件服务器发送电子邮件的Java应用程序。使用javax.mail.*类发送电子邮件非常有效,但是 我正在尝试捕获任何失败的消息-反弹的消息。我在这里读了一百万篇博客文章和问答,说这是不可能的。这显然是可能的,因为像我的银行这样的网站可以检测到他们的一封电子邮件由于我的邮件服务器停机而没有送达我的地址 我可以在进出口日志中看到电子邮件已被退回-如果我使用asdf@asdf.com例如,我想要这些信息。我了解Exim和大多数邮件服务器是如何在客户端断开连接很久之后接受

我有一个通过本地主机Exim4邮件服务器发送电子邮件的Java应用程序。使用javax.mail.*类发送电子邮件非常有效,但是

我正在尝试捕获任何失败的消息-反弹的消息。我在这里读了一百万篇博客文章和问答,说这是不可能的。这显然是可能的,因为像我的银行这样的网站可以检测到他们的一封电子邮件由于我的邮件服务器停机而没有送达我的地址

我可以在进出口日志中看到电子邮件已被退回-如果我使用asdf@asdf.com例如,我想要这些信息。我了解Exim和大多数邮件服务器是如何在客户端断开连接很久之后接受邮件,然后将其添加到队列中发送的。一个选择当然是观察日志。但我不愿意这样做,因为肯定有更好的办法

我不受技术选择的限制,只是需要GPL esq,Java需要在将细节写入DBs时发送和处理故障

我试过阿斯匹林,但我发现缺少文档,我很难让听众按照我想要的方式工作

有人有什么想法吗?你能给我指一下正确的方向吗

//编辑

我只是想澄清我所说的成功是什么意思——我很感激一些服务器可能会接受邮件,但由于各种原因,例如垃圾邮件,它可能永远不会发送到用户的收件箱,我意识到我无法检测到这一点。我想检测的是邮件服务器是否明显拒绝了电子邮件

我正在考虑在我的Exim服务器上设置一个对被退回的电子邮件的全面检查,并每N分钟轮询一次,以检查失败情况。看起来我可以在消息头中隐藏一个ID,以使其更加程序友好。也许我需要再研究一下阿司匹林

//答复

为了回答这个问题,我选择了

最后我用阿斯匹林做Java。。。它运行良好,但有一个例外——我似乎无法消除排队发送电子邮件和实际发送电子邮件之间60秒的延迟

我在“启动阿司匹林课程”中使用了此代码

MailComplete mc = new MailComplete();
AspirinInternal.addListener(mc);
这门课是做“邮件完成”工作的

import org.masukomi.aspirin.core.listener.AspirinListener;
import org.masukomi.aspirin.core.listener.ResultState;

public class MailComplete implements AspirinListener{

    @Override
    public void delivered(String string, String string1, ResultState rs, String string2) {     
        // Code here
    }
}
请注意,只有在发送完成的邮件时,才会触发此侦听器。ResultState似乎大部分为空,这有点无用。基本上,如果这个类触发,那么很可能是电子邮件发送了

到目前为止,它似乎已经在我的基本测试中发挥了作用,但它并不理想,而且代码对于NULL业务来说似乎有点松散。正如我所说,这似乎是可行的,但由于缺乏关于这一问题的文件,很难说这是否是最好的

如果有人偶然发现了这个,并且有了更好的想法,或者更好的代码,我会非常感兴趣


干杯。

您的标题不正确。JavaMail通过抛出异常来捕获根本没有发送的邮件。您正在寻找的是一个解决方案,它可以扫描您的收件箱以查找跳转邮件。请澄清你的标题。它捕获的邮件没有添加到传递过程中,但没有邮件被发送或不被发送的概念,至少按照我的理解是这样的。