• PHP 实现下载邮件功能,保存为eml格式


    引言:因为业务需求,需要获取订单的往来邮件,其中涉及到下载邮件功能。由于腾讯企业邮箱API接口不支持下载邮件功能,只能自己写。

    1. 获取邮件内容,保存到数据库
      步骤略:网上有很多现成的,利用imap来获取

    2. 将获取到的邮件内容保存为eml格式
      如下为从数据库中取的的数据:

    {
        "id": "135",
        "sender": "sender@qq.com",
        "sender_name": "我是发件人",
        "to_name": "收件人1,收件人2,ymy",
        "to_list": "wusong@qq.com,liangso@qq.com,ymy@qq.com",
        "cc_list": "抄送人",
        "cc_name": "cc1@qq.com",
        "title": "我是主题",
        "content": "<p>测试一下!!!{43575}<br></p>",
        "email_time": "2018-09-15 09:56:05",
        "create_time": "2018-09-15 09:56:05",
        "update_time": "2018-09-15 09:56:05"
    }
    

    代码实现:

    
    $mailDetail = json_decode($json, true);
    
    $str = "";
    // 邮件日期(后面的+0800是北京时间的时区)
    $str .= "Date: {$mailDetail['email_time']} +0800".PHP_EOL;
    
    // 处理收件人
    $str .= "To: ";
    $toName = explode(',', $mailDetail['to_name']);
    $toEmail = explode(',', $mailDetail['to_list']);
    foreach ($toName as $k => $name){
        $str .= "$name <$toEmail[$k]>";
        if($k+1 != count($toName)){
            $str .= ", ";
        }else{
            $str .= PHP_EOL;
        }
    }
    
    // 处理抄送人
    $ccName = explode(',', $mailDetail['cc_name']);
    $ccEmail = explode(',', $mailDetail['cc_list']);
    if(!empty($ccName)){
        $str .= "Cc: ";
        foreach ($ccName as $k => $name){
            $str .= "$name <$ccEmail[$k]>";
            if($k+1 != count($ccName)){
                $str .= ", ";
            }else{
                $str .= PHP_EOL;
            }
        }
    }
    
    // 发件人
    $str .= "From: {$mailDetail['sender_name']} <{$mailDetail['sender']}>".PHP_EOL;
    
    // 邮件主题
    $str .= "Subject: {$mailDetail['title']}". PHP_EOL;
    
    // 邮件输出格式
    $str .= "MIME-Version: 1.0". PHP_EOL;
    $str .= "Content-Type: text/html; charset=UTF-8". PHP_EOL;
    $str .= "Content-Transfer-Encoding: 8bit". PHP_EOL;
    
    // 邮件内容
    $str .= PHP_EOL . "{$mailDetail['content']}".PHP_EOL;
    
    // 保存
    file_put_contents('test.eml', $str);
    
    1. test.eml内容

    1. 将test.eml用foxmail打开

    1. 以下问题待修复:
    • 邮件附件没有加进去
    不积跬步,无以至千里
  • 相关阅读:
    cocos2d-x step by step(3) Doub le Kill简单的一些小动画
    OpenGL step to step(2)
    OpenGL step to step(1)
    cocos2d-x step by step(3) Double Kill
    cocos2d-x step by step(2) 鼠标事件,键盘事件,等等事件
    cocos2d-x step by step(1) First Blood
    Unity Step by Step(一)
    写在最前段的序言
    xamarin studio 安装
    xamarin studio 中SpinButton ComBox Splid 鼠标放上去就会自动接收焦点,然后进行数值变化
  • 原文地址:https://www.cnblogs.com/wu-song/p/9651017.html
Copyright © 2020-2023  润新知