目標:PDFが添付された電子メールをDrupal 8.で送信する必要があります。
件名とメッセージを記載したメールを送信できますが、添付ファイルを取得することができません。メールにファイルを添付するロジックをオンにすると、メールは送信されませんが、メールサービスはTrueを返します。エラーはなく、ログには何も記録されていません。
次のモジュールがインストールされています。
$message['params']['files'][] = $params['attachments']
ではなく$message['params']['attachments'][] = $params['attachments']
を使用してみました$file->uri
を$file->filepath
に変更しようとしました次のようにファイルを添付しようとしました:
$params['attachments']['filecontent'] = $this->generatePDF($foa_list);
$params['attachments']['filename'] = 'MyFormsOfAssistance.pdf';
$params['attachments']['filemime'] = 'application/pdf';
配列を使用してパスのみでファイルを添付しようとしました:
$attachment = array(
'filepath'=>'sites/default/files/MyFormsOfAssistance.pdf',
);
$params['attachments'] = $attachment;
別の方法でファイルを添付しようとしました:
$attachment = array(
'filepath' => 'sites/default/files/MyFormsOfAssistance.pdf',
'filename' => 'MyFormsOfAssistance.pdf',
'filemime' => 'application/pdf'
);
$params['attachments'][] = $attachment;
これが私のメールコントローラーのコードです:
public function submit_email($foa_list = null) {
$lang = "en";
$email_to = "[email protected]";
$params['subject'] = "Test subject";
$params['body'] = "Test body";
// -------------------- Attachment Logic -----------------------
// Create pdf file and store file
file_put_contents('sites/default/files/MyFormsOfAssistance.pdf', $this->generatePDF($foa_list));
// Attach pdf file to email params
$file = new \stdClass();
$file->uri = 'sites/default/files/MyFormsOfAssistance.pdf';
$file->filename = 'MyFormsOfAssistance.pdf';
$file->filemime = 'application/pdf';
$params['attachments'][] = $file;
// Send email
\Drupal::service('plugin.manager.mail')->mail('email', 'email', $email_to, $lang, $params);
$response = new Response();
$response->setContent("true");
return $response;
}
これが私のEメールモジュールファイルのhook_mail()コードです:
// Note that print_and_email is what my module is called.
function print_and_email_mail($key, &$message, $params) {
switch($key) {
case 'email':
$message['subject'] = $params['subject'];
$message['body'][] = $params['body'];
$message['headers'] = [
'MIME-Version' => '1.0',
'Content-Type' => 'text/html; charset=UTF-8; format=flowed; delsp=yes',
'Content-Transfer-Encoding' => '8Bit',
'X-Mailer' => 'Drupal',
];
// $message['params']['files'][] = $params['attachments']; // Note: I have seen other examples implement attachments this way
$message['params']['attachments'][] = $params['attachments'];
break;
}
}
Drupal 8のドキュメントはあまり役に立たないので、SwiftMailerをインストールせずにこれを理解できるようにしたいのですが、一部のソースが推奨しています。これがうまく機能しない理由は本当にわかりません他の人のために働いています。
最終的に! 4週間後...
したがって、次のコードは私にとってはうまくいきました:
$attachment = array(
'filepath' => 'sites/default/files/MyFormsOfAssistance.pdf',
'filename' => 'MyFormsOfAssistance.pdf',
'filemime' => 'application/pdf'
);
しかし、重要なのは、MailSystem構成で、フォーマッタと送信者を "SMTP Mailer"に設定する必要があったことです。 MimeMailの設定は、SMTPの設定から値を自動的に引き出しました。
$invoice_pdf = File::load($fid); // the file id
$invoice_file = (object) [
'filename' => 'invoice.pdf',
'uri' => $invoice_pdf->getFileUri(),
'filemime' => $invoice_pdf->getMimeType(),
];
$message['params']['files'][] = $invoice_file;
「ファイル」は配列でなければなりません。それが私が最も困難だったものです。ここに完全なコード: 管理されたファイルが添付された電子メールをdrupal 8 に送信します