【问题标题】:How to reply to specific email using UID in imap fetched emails in php如何在 imap 中使用 UID 回复特定电子邮件在 php 中提取的电子邮件
【发布时间】:2018-09-23 18:28:13
【问题描述】:

我已经使用 SMTP gmail 设置发送电子邮件,它工作正常,我使用 php 的 IMAP 功能获取电子邮件,并且还返回电子邮件列表。现在我有他们的 uid 的电子邮件列表。我想将回复发送到收到的电子邮件。下面是我的 cakephp IMAP 代码:

public function listMessages($params=array()) {

    $page = (isset($params['page'])) ? $params['page'] : 1;
    $per_page = (isset($params['per_page'])) ? $params['per_page'] : 10; 
    $sort = (isset($params['sort'])) ? $params['sort'] : null;
    $sorted = null;
    $limit = ($per_page * $page);
    $start = ($limit - $per_page) + 1;
    $start = ($start < 1) ? 1 : $start;
    $limit = (($limit - $start) != ($per_page-1)) ? ($start + ($per_page-1)) : $limit;
    $info = imap_check($this->imapStream);
    $limit = ($info->Nmsgs < $limit) ? $info->Nmsgs : $limit;

    if(true === is_array($sort)) {
        $sorting = array(
                    'direction' => array(   'asc' => 0,
                                            'desc' => 1),

                    'by'        => array(   'date' => SORTDATE,
                                            'arrival' => SORTARRIVAL,
                                            'from' => SORTFROM,
                                            'subject' => SORTSUBJECT,
                                            'size' => SORTSIZE));
        $by = (true === is_int($by = $sorting['by'][$sort[0]]))
                        ? $by
                        : $sorting['by']['date'];
        $direction = (true === is_int($direction = $sorting['direction'][$sort[1]]))
                        ? $direction
                        : $sorting['direction']['desc'];

        $sorted = imap_sort($this->imapStream, $by, $direction);

        $msgs = array_chunk($sorted, $per_page);
        $msgs = $msgs[$page-1];
    }
    else
        $msgs = range($start, $limit); //just to keep it consistent

    $result = imap_fetch_overview($this->imapStream, implode($msgs, ','), 0);
    if(false === is_array($result)) return false;

    //sorting!
    if(true === is_array($sorted)) {
        $tmp_result = array();
        foreach($result as $r)
            $tmp_result[$r->msgno] = $r;

        $result = array();
        foreach($msgs as $msgno) {
            $result[] = $tmp_result[$msgno];
        }
    }

    $return = array('res' => $result,
                    'start' => $start,
                    'limit' => $limit,
                    'sorting' => array('by' => $sort[0], 'direction' => $sort[1]),
                    'total' => imap_num_msg($this->imapStream));
    $return['pages'] = ceil($return['total'] / $per_page);
    return $return;
}

【问题讨论】:

  • 这段代码有什么不工作的地方吗?或者您是否希望有人会为您编写一个添加您需要的功能的函数?
  • 您的问题是什么?
  • @GregSchmidt:很抱歉回复晚了,但我自己找到了解决方案:)您可以查看下面的答案。我的查询:我想将回复发送到收到的电子邮件
  • @Max: 抱歉回复晚了,我的问题是:我想将回复发送到收到的电子邮件 幸运的是,我自己找到了解决方案 :) 你可以检查下面的答案。

标签: php cakephp imap gmail-imap google-email-settings-api


【解决方案1】:

我已使此功能有效。只需在发送电子邮件之前在主题前添加“Re:”即可。 Gmail 会自动将其视为回复并在同一线程上继续,而不是将其显示为新的单独电子邮件。

【讨论】:

  • 能否请您发布您的结果?
  • @DemetrioGuilardi:抱歉回复晚了,请问您希望看到什么结果?正如在电子邮件主题前使用“Re:”所提到的,GMAIL 会自动认为我们正在向我们收到的该主题的电子邮件发送回复。
  • 您应该操纵 In-Reply-To: 标头以获得广泛支持并满足线程标准。
  • @Max :我要求您使用我的问题中的代码并对其进行编辑并作为答案发布。以便新用户可以使用该方法获得广泛支持。因为我从 2 年开始就完成了那个项目 :) 但我理解你的回答(Y)
猜你喜欢
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
相关资源
最近更新 更多