通过PHP捕获退回的电子邮件地址

时间:2017-09-26 13:46:24

标签: php email smtp

我目前正在开发一个处理从csv导入的数据数组的项目。一旦为该特定行处理了数据,它就会向该行指定的电子邮件地址发送电子邮件。

我的客户要求他们需要知道电子邮件是否由于向csv输入了错误的电子邮件地址而退回。

我目前使用PHP和我们托管的SMTP中继发送电子邮件。到目前为止,我找到工作的唯一方法是扫描包含任何电子邮件的发送电子邮件地址主题Undelivered Mail Returned to Sender

这是完美的工作,我得到了所有已退回的电子邮件的列表。我的问题是我需要获取输入错误的电子邮件地址。如果您看到下面的屏幕截图,则可以看到脚本生成包含电子邮件地址的HTML元素/节点。

HTML Element/Node

我的问题是,如何抓住/调用此元素?

我已尝试print_r电子邮件对象,遗憾的是没有包含我需要的电子邮件地址的数组索引。

请参阅下面的代码,看看我是如何做到这一点的:

<?php 

    $date = date('y-m-d');
    $hostname = '';
    $username = '';
    $password = '';

    $inbox = imap_open($hostname,$username,$password) or die('Cannot 
    connect to mailbox: ' . imap_last_error());
    $emails = imap_search($inbox,'SUBJECT "Undelivered Mail Returned to Sender" ON "'.$date.'"');


    if($emails){
    rsort($emails);
        foreach($emails as $email){
            $overview = imap_fetch_overview($inbox,$email,0);
            $message = imap_body($inbox, $email);
            print_r($overview);
            print_r($message);
            echo '<br>';

            print_r($email);
        }
    }

感谢您过去的出色帮助和支持。

路易斯

2 个答案:

答案 0 :(得分:2)

David和Kyrre设法指出了我正确的方向,经过一些研究,我发现电子邮件地址在经过一些关于如何抓住{Final-Recipient的研究之后也被定位为Final-Recipient。我能够抓住我需要的东西。

要做到这一点,我按照此SA线程中的讨论进行了以下操作:Regular expression to parse Final-Recipient email header

    $message = imap_body($inbox, $email);
    $pattern = '/Final-Recipient: rfc822; (.*)/';
    $matches = Array();
    preg_match($pattern, $message, $matches);
    $email = $matches[1];

答案 1 :(得分:0)

由于@Kyrre提到了imap_search()字符串,假装它是一个SQL查询。收到退回电子邮件的回复here。还有this甜蜜的漫游,它会返回整个电子邮件内容。