PHP 8.6.0 Beta 1 is available for testing

imap_append

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

imap_appendДобавляет строковое сообщение в указанный почтовый ящик

Описание

function imap_append(
IMAP\Connection $imap,
string $folder,
string $message,
? string $options = null ,
? string $internal_date = null
): bool

Добавляет строку message в указанный folder.

Список параметров

imap
Экземпляр класса IMAP\Connection .
folder

Имя почтового ящика. Смотрите imap_open() для подробной информации.

Внимание

Передача в этот параметр непроверенных данных небезопасна, если включили директиву imap.enable_insecure_rsh.

message

Добавляемое сообщение в виде строки

При обращении к серверу Cyrus IMAP следует использовать "\r\n" как завершающий символ строки вместо "\n", иначе операция будет неудачна.

options

Если указан, то параметр options также будет записан в folder

internal_date

Если этот параметр указан, он установит INTERNALDATE в добавляемом сообщении. Параметр должен содержать дату, представленную строкой, которая соответствует спецификации rfc2060 для значения date_time.

Возвращаемые значения

Функция возвращает true , если выполнилась успешно, или false , если возникла ошибка.

Список изменений

Версия Описание
8.1.0 Параметр imap теперь принимает объект IMAP\Connection ; раньше параметр ждал ресурс (resource ) imap.
8.0.0 options и internal_date теперь допускают значение null.

Примеры

Пример #1 Пример использования imap_append()

<?php
$imap = imap_open("{imap.example.org}INBOX.Drafts", "username", "password");
$check = imap_check($imap);
echo "Кол-во сообщений до добавления: ". $check->Nmsgs . "\n";
imap_append($imap, "{imap.example.org}INBOX.Drafts"
 , "From: me@example.com\r\n"
 . "To: you@example.com\r\n"
 . "Subject: test\r\n"
 . "\r\n"
 . "это проверочное сообщение, пожалуйста, игнорируйте его\r\n"
 );
$check = imap_check($imap);
echo "Кол-во сообщений после добавления : ". $check->Nmsgs . "\n";
imap_close($imap);
?>

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 4 notes

up
20
rixsta at hotmail dot com
13 years ago
Hi,
As we have been struggling with this for some time I wanted to share how we got imap_append working properly with all MIME parts including attachments. If you are sending email and also wish to append the sent message to the Sent Items folder, I cannot think of an easier way to do this, as follows:
1) Use SwiftMailer to send the message via PHP.
$message = Swift_Message::newInstance("Subject goes here");
(then add from, to, body, attachments etc)
$result = $mailer->send($message);
2) When you construct the message in step 1) above save it to a variable as follows:
$msg = $message->toString(); (this creates the full MIME message required for imap_append()!! After this you can call imap_append like this:
imap_append($imap_conn,$mail_box,$msg."\r\n","\\Seen");
I hope this helps the readers, and prevents saves people from doing what we started doing - hand crafting the MIME messages :-0
up
6
kaminski at istori dot com
16 years ago
The date format string to use when creating $internal_date is 'd-M-Y H:i:s O'.
up
9
Krzysiek
11 years ago
You can use PHPMailer ( https://github.com/PHPMailer/PHPMailer/ ) with imap.
<?php
// after creating content of mail you have to run preSend() - part of send() method
$mail->send();
// and you can get whole raw message with getSentMIMEMessage() method
imap_append($imap, $mailserver.'INBOX.Sent',$mail->getSentMIMEMessage(), "\\Seen");
up
2
jab_creations at yahoo dot com
1 year ago
This function is how you take a sent message in your mail shell and place a copy of it in the remote mail server's sent folder.
It is however not intuitive and I struggled for a couple hours so I'm placing these notes here to spare others the aggravation. Some of the errors I encountered:
 - Can't append to mailbox with such a name
 - Internal date not correctly formatted
The second/folder parameter is not the string you might think it is (e.g. "Sent", "Inbox.Sent", etc). It is the connection information used by imap_open() which doesn't make sense as the connection is already open! Whatever, here is a basic example addressing those three errors:
<?php
$server = '{mail.example.com:993/ssl/imap}INBOX.Sent';
$mail_connection_folder = imap_open($server, $user, $pass);
if ($mail_connection)
{
 $result = imap_append($mail_connection, $server, $message_string_raw, '\\Seen', date('d-M-Y H:i:s O'));
}
?>

I had been using the PHP Pear Mail extension which did a fantastic job with DMARC, SPF, DKIM, etc. However it's not well maintained and I couldn't figure out if it returns the email message string. The PHPMailer library (https://github.com/PHPMailer/PHPMailer) does return the message string:
<?php
//Skip to key parts:
$result = $mail->send();
if ($result)
{
 $message_string_raw = $mail->getSentMIMEMessage();
}
else {/*error handling*/}
?>

Hopefully this will spare some folks a lot of aggravation.
+Добавить

AltStyle によって変換されたページ (->オリジナル) /