PHP 8.4.2 Released!

imap_mail_compose

(PHP 4, PHP 5, PHP 7, PHP 8)

imap_mail_compose 指定したエンベロープおよびボディセクションに基づいて MIME メッセージを作成する

説明

imap_mail_compose(array $envelope, array $bodies): string|false

指定したエンベロープ envelope およびボディセクション bodies に基づいて MIME メッセージを作成します。

パラメータ

envelope

ヘッダフィールドの連想配列。使えるキーは "remail", "return_path", "date", "from", "reply_to", "in_reply_to", "subject", "to", "cc", "bcc""message_id"。 これらの値は、連想配列の値に与えられた文字列でそれぞれのヘッダを設定します。 さらに追加のヘッダを設定する用途として、 "custom_headers" がサポートされています。 ここには、その他のヘッダの連想配列を指定します。例: ["User-Agent: My Mail Client"]

bodies

本文の配列。 配列の最初の要素が、メッセージの中心部分です。 TYPEMULTIPART の場合にだけ、ふたつめ以降の要素が処理されます。 処理された要素は、本文の一部を構成します。

body に指定する配列の構造
キー 説明
type int MIMEタイプ。 TYPETEXT (デフォルト), TYPEMULTIPART, TYPEMESSAGE, TYPEAPPLICATION, TYPEAUDIO, TYPEIMAGE, TYPEMODEL, TYPEOTHER が指定できます。
encoding int Content-Transfer-Encoding の値を指定します。 ENC7BIT (デフォルト), ENC8BIT, ENCBINARY, ENCBASE64, ENCQUOTEDPRINTABLE, ENCOTHER が指定できます。
charset string MIMEタイプの charset パラメータの値
type.parameters array Content-Type の名前と値を連想配列で指定します。
subtype string MIMEサブタイプ。例: TYPEIMAGE の場合は 'jpeg'
id string Content-ID の値
description string Content-Description の値
disposition.type string Content-Disposition の値。例: 'attachment'
disposition array Content-Disposition の名前と値を連想配列で指定します。
contents.data string ペイロード
lines int The size of the payload in lines.
bytes int ペイロードのサイズをバイト単位で指定します。
md5 string ペイロードのMD5チェックサム

戻り値

MIME メッセージを文字列として返します。 失敗した場合に false を返します

例1 imap_mail_compose() の例

<?php

$envelope
["from"]= "joe@example.com";
$envelope["to"] = "foo@example.com";
$envelope["cc"] = "bar@example.com";

$part1["type"] = TYPEMULTIPART;
$part1["subtype"] = "mixed";

$filename = "/tmp/imap.c.gz";
$fp = fopen($filename, "r");
$contents = fread($fp, filesize($filename));
fclose($fp);

$part2["type"] = TYPEAPPLICATION;
$part2["encoding"] = ENCBINARY;
$part2["subtype"] = "octet-stream";
$part2["description"] = basename($filename);
$part2["contents.data"] = $contents;

$part3["type"] = TYPETEXT;
$part3["subtype"] = "plain";
$part3["description"] = "description3";
$part3["contents.data"] = "contents.data3\n\n\n\t";

$body[1] = $part1;
$body[2] = $part2;
$body[3] = $part3;

echo
nl2br(imap_mail_compose($envelope, $body));

?>

add a note

User Contributed Notes 5 notes

up
5
jvandeweghe at kipsu dot com
7 years ago
The custom_headers envelope documentation is misleading. Its not actually an "associative array", its a regular array of headers.

This is wrong:

<?php
$envelope
= [
//...
"custom_headers" => [
"X-SES-CONFIGURATION-SET" => "example",
"X-SES-MESSAGE-TAGS" => "emailType=example"
]
];
?>

This is right:

<?php
$envelope
= [
//...
"custom_headers" => [
"X-SES-CONFIGURATION-SET: example",
"X-SES-MESSAGE-TAGS: emailType=example"
]
];
?>
up
3
prices at dflytech dot com
22 years ago
The documentation above does not mention that you can use the index ["charset"] to set the character set of the messsage part.

Example:

$part1["type"]= "TEXT";
$part1["subtype"]="PLAIN";
$part1["charset"] = "koi8-r";

to send a message in Russian-koi8.

Scott =)
up
3
Los Olvidados
21 years ago
If you wish to send the output of this function, simply use it for the headers argument of imap_mail() or mail(). Keep in mind that those functions set the To: and Subject: headers, so including them in the envelope will create double entries.
up
2
thomas dot hebinck at digionline dot de
21 years ago
It is a good idea to set the date header:
$envelope['date']=date('r');
up
2
Guido
16 years ago
For some email clients its necessary first to start with the body text and end with the attachment(s). Otherwise all the parts end up in attachments, also the body text (took a while to find this).

So example #1 (above) should be switched over, like:

$body[1] = $part1;
$body[2] = $part3;
$body[3] = $part2;
To Top