imap_mail_compose
(PHP 4, PHP 5, PHP 7, PHP 8)
imap_mail_compose — 指定したエンベロープおよびボディセクションに基づいて MIME メッセージを作成する
説明
指定したエンベロープ 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));
?>
User Contributed Notes 5 notes
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"
]
];
?>
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 =)
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.
It is a good idea to set the date header:
$envelope['date']=date('r');
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;