PHP Conference Japan 2024

imap_mail_compose

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

imap_mail_compose基于给定的信封和正文部分创建 MIME 消息

描述

imap_mail_compose(数组 $envelope, 数组 $bodies): 字符串|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时,才会处理其他正文;这些正文构成各个部分的正文。

正文数组结构
类型 描述
type int MIME 类型。其中一个是TYPETEXT(默认)、TYPEMULTIPARTTYPEMESSAGETYPEAPPLICATIONTYPEAUDIOTYPEIMAGETYPEMODELTYPEOTHER
encoding int Content-Transfer-Encoding。其中一个是ENC7BIT(默认)、ENC8BITENCBINARYENCBASE64ENCQUOTEDPRINTABLEENCOTHER
charset string MIME 类型的字符集参数。
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 有效负载的行数。
bytes int 有效负载的字节数。
md5 string 有效负载的 MD5 校验和。

返回值

返回 MIME 消息作为字符串,或在失败时返回false

示例

示例 #1 imap_mail_compose() 示例

<?php

$envelope
["from"]= "[email protected]";
$envelope["to"] = "[email protected]";
$envelope["cc"] = "[email protected]";

$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));

?>

添加备注

用户贡献的备注 5 条备注

jvandeweghe at kipsu dot com
7 年前
custom_headers 信封文档具有误导性。它实际上不是“关联数组”,而是一个普通的报头数组。

这是错误的

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

这是正确的

<?php
$envelope
= [
//...
"custom_headers" => [
"X-SES-CONFIGURATION-SET: example",
"X-SES-MESSAGE-TAGS: emailType=example"
]
];
?>
prices at dflytech dot com
22 年前
上面的文档没有提到可以使用索引 ["charset"] 来设置消息部分的字符集。

示例

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

用于发送俄语-koi8 消息。

Scott =)
Los Olvidados
21 年前
如果要发送此函数的输出,只需将其用于 imap_mail() 或 mail() 函数的 headers 参数。请记住,这些函数设置 To: 和 Subject: 报头,因此在信封中包含它们将创建重复项。
thomas dot hebinck at digionline dot de
21 年前
最好设置日期报头
$envelope['date']=date('r');
Guido
16 年前
对于某些电子邮件客户端,首先需要从正文文本开始,然后以附件结束。否则所有部分最终都将成为附件,包括正文文本(找到这一点花了一段时间)。

因此,示例 1(上面)应切换,例如

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