【问题标题】:adding mandrill email attachments using foreach loop使用 foreach 循环添加山魈电子邮件附件
【发布时间】:2016-05-26 18:24:39
【问题描述】:

我需要回复收到的电子邮件,包括其中包含的附件​​。 我编写了这段代码,但由于某种原因,当我检查调试日志和 mandrill API 日志时,附件未包含在请求中。 我的错在哪里?

if ($message['attachments']) 
    {

        $mail= 
            [
                'html' => $mail->msg->html,
                'text' => $mail->msg->text,
                'subject' => $mail->msg->subject,
                'from_email' => 'test@test.com',
                'from_name' => $mail->msg->from_name,
                'to' => [
                    [
                        'email' => 'test@test.com',
                        'name' => 'test@test.com',
                        'type' => 'to'
                    ]
                ],
                'headers' => [
                    'Reply-To' => $mail->msg->from_email
                ],
            ];
            //just some sample data for testing
            foreach ($message['attachment'] as $attachment) 
                {
                    $mail['attachments']['name'] ='sample.png';
                    $mail['attachments']['type'] ='image/png';
                    $mail['attachments']['content'] ='iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
                }

                $async = false;
                $ip_pool = 'Main Pool';

                $v = var_export( $mail, true);
                file_put_contents('phplog.txt', 'gesendet: ' . $v, FILE_APPEND);

                $result = $mandrill->messages->send($mail, $async, $ip_pool, $send_at);
    }

【问题讨论】:

    标签: php email email-attachments mandrill


    【解决方案1】:

    下面的行看起来很可疑。如果您在此处查看https://mandrillapp.com/api/docs/messages.html。可以清楚的看到attachments 是一个多维数组。

     //just some sample data for testing
            foreach ($message['attachment'] as $attachment) 
                {
                    $mail['attachments']['name'] ='sample.png';
                    $mail['attachments']['type'] ='image/png';
                    $mail['attachments']['content'] ='iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
                }
    

    至少应该像下面这样,但你仍然没有在代码中使用$attachment。但正确用法如下。

        foreach ($message['attachment'] as $key => $attachment) 
            {
                $mail['attachments'][$key]['name'] ='sample.png';
                $mail['attachments'][$key]['type'] ='image/png';
                $mail['attachments'][$key]['content'] ='iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
            }
    

    如果您想以更清晰的方式尝试,请使用以下方式:

    $attachment = [];
    $attachment['name'] ='sample.png';
    $attachment['type'] ='image/png';
    $attachment['content'] ='iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';
    
    
    
    
    $mail['attachments'][] = $attachment;
    

    根据评论更新:

    一切正常,只需将 if 语句 if ($message['attachments']) 更改为 if (is_array($message['attachments']) && count($message['attachments']) > 1),然后在 if 语句后放置 $message['attachments'] = array_values($message['attachments']);

    像下面这样循环。关注$attachment我给它添加了语义键,你可以根据需要更改。我不知道您获取文件、静态或文件上传等的来源是哪里。我添加了一个示例。

        foreach ($message['attachment'] as $key => $attachment) 
            {
                $mail['attachments'][$key]['name'] =$attachment['fileName'];
                $mail['attachments'][$key]['type'] =$attachment['mimeType'];
                $mail['attachments'][$key]['content'] = chunk_split(base64_encode(file_get_contents($attachment['filePath']))); ;
            }
    

    【讨论】:

    • 在我的循环中使用您的代码的最佳方式是什么(循环每个传入的附件并将其附加到我想发送的新邮件中)?
    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 2015-06-22
    • 2015-07-16
    • 2015-05-02
    • 2014-09-02
    • 1970-01-01
    • 2013-05-28
    • 2015-01-27
    相关资源
    最近更新 更多