Амазонское почтовое приложение ses php

Я пытаюсь отправить PDF-вложения по почте с помощью функции amazon SES sendmail() в php. Я написал функцию, которая принимает MIME-тип в качестве содержимого и отправляет письмо. Но я не могу отправить вложение по почте. пути к файлам и все остальные значения кажутся идеальными.

Код функции выглядит следующим образом:

/*
* Function sendRawMail() is used to send mails to user with attachments
*/
public function sendRawMail($subject, $body='', $to, $cc = '',$bcc = '', $filetype,$filename,$filepath) 
{

    $domain = explode('@', $to);
    if (count($domain) > 1 && $domain[1] == 'guest.com') {
        $to = 'knowlensguestuser3@gmail.com';
    }

    $destination = array();
    $destination['ToAddresses'] = array($to);
    if($cc != '')
    {
        $cc = explode(',', $cc);
        $destination['CcAddresses'] = $cc;
    }
    if($bcc != '')
    {
        $bcc = explode(',', $bcc);
        $destination['BccAddresses'] = $bcc;
    }


    $replyTo = 'notifications@knowlens.com';

    $client = SesClient::factory(array(
        'key' => Yii::$app->params['aws.id'],
        'secret' => Yii::$app->params['aws.secret'],
        'region' => 'us-east-1',
    ));

    $message= "To: ".$to."\n";
    $message.= "From: ".$replyTo."\n";
    $message.= "Subject: ".$subject."\n";
    $message.= "MIME-Version: 1.0\n";
    $message.= 'Content-Type: multipart/mixed; boundary="aRandomString_with_signs_or_9879497q8w7r8number"';
    $message.= "\n\n";
    $message.= "--aRandomString_with_signs_or_9879497q8w7r8number\n";
    $message.= 'Content-Type: text/plain; charset="utf-8"';
    $message.= "\n";
    $message.= "Content-Transfer-Encoding: 7bit\n";
    $message.= "Content-Disposition: inline\n";
    $message.= "\n";
    $message.= $body;
    $message.= "\n\n";
    $message.= "--aRandomString_with_signs_or_9879497q8w7r8number\n";
    $message.= "Content-ID: \<77987_SOME_WEIRD_TOKEN_BUT_UNIQUE_SO_SOMETIMES_A_@domain.com_IS_ADDED\>\n";
    $message.= 'Content-Type: application/'.$filetype.'; name="'.$filename.'"';
    $message.= "\n";
    $message.= "Content-Transfer-Encoding: base64\n";
    $message.= 'Content-Disposition: attachment; filename="'.$filename.'"';
    $message.= "\n";
    $message.= base64_encode(file_get_contents($filepath));
    $message.= "\n";
    $message.= "--aRandomString_with_signs_or_9879497q8w7r8number--\n";

    $result = $client->SendRawEmail(array(
        // Source is required
        'Source' => '​​​​Knowlens Solutions Pvt. Ltd. <notifications@knowlens.com>',
        // Destination is required
        'Destination' => $destination,
        // Message is required
        'RawMessage' => array(
            // Data is required
            'Data' => base64_encode($message),
        ),

    ));

}

Почта успешно отправлена ​​пользователю, но без вложений. Пожалуйста помоги.

2 ответа

Решение

Общий размер сообщения не может превышать 10 МБ. Это включает в себя любые вложения, которые являются частью сообщения. Вы проверили размер вашего файла PDF?

Благодарю. Это сработало для меня. Обновлен код следующим образом:

Функция sendRawMail() используется для отправки почты пользователю (почта AWS с вложением)

public function sendRawMail($subject, $body='', $to, $cc = '',$bcc = '', $filetype,$filename,$filepath) 
{
    $precc = $cc;
    $prebcc = $bcc;

    $domain = explode('@', $to);
    if (count($domain) > 1 && $domain[1] == 'ABC.com') {
        $to = 'guestuser3@ABC.com';
    }

    $destination = array();
    $destination['ToAddresses'] = array($to);
    if($cc != '')
    {
        $cc = explode(',', $cc);
        $destination['CcAddresses'] = $cc;
    }
    if($bcc != '')
    {
        $bcc = explode(',', $bcc);
        $destination['BccAddresses'] = $bcc;
    }


    $replyTo = 'notifications@knowlens.com';

    $client = SesClient::factory(array(
        'key' => Yii::$app->params['aws.id'],
        'secret' => Yii::$app->params['aws.secret'],
        'region' => 'us-east-1',
    ));

    $message= "To: ".$to."\n";
    $message.= "From: ".$replyTo."\n";
    if($precc != '')
    {
        $message.= "Cc: ".$precc."\n";
    }
    if($prebcc != '')
    {
        $message.= "Bcc: ".$prebcc."\n";
    }
    $message.= "Subject: ".$subject."\n";
    $message.= "MIME-Version: 1.0\n";
    $message.= 'Content-Type: multipart/mixed; boundary="aRandomString_with_signs_or_9879497q8w7r8number"';
    $message.= "\n\n";
    $message.= "--aRandomString_with_signs_or_9879497q8w7r8number\n";
    $message.= 'Content-Type: text/html; charset="utf-8"';
    $message.= "\n";
    $message.= "Content-Transfer-Encoding: 7bit\n";
    $message.= "Content-Disposition: inline\n";
    $message.= "\n";
    $message.= $body;
    $message.= "\n\n";
    $message.= "--aRandomString_with_signs_or_9879497q8w7r8number\n";
    $message.= "Content-ID: \<77987_SOME_WEIRD_TOKEN_BUT_UNIQUE_SO_SOMETIMES_A_@domain.com_IS_ADDED\>\n";
    $message.= 'Content-Type: application/'.$filetype.'; name="'.$filename.'"';
    $message.= "\n";
    $message.= "Content-Transfer-Encoding: base64\n";
    $message.= 'Content-Disposition: attachment; filename="'.$filename.'"';
    $message.= "\n";
    $message.= base64_encode(file_get_contents($filepath));
    $message.= "\n";
    $message.= "--aRandomString_with_signs_or_9879497q8w7r8number--\n";
    $result = $client->SendRawEmail(array(
        // Source is required
        'Source' => 'ABC Solutions Pvt. Ltd. <notifications@ABC.com>',
        // Destination is required
        'Destination' => $destination,
        // Message is required
        'RawMessage' => array(
            // Data is required
            'Data' => base64_encode($message),
        ),

    ));
    return $result;
}
Другие вопросы по тегам