imap_append

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

imap_appendAppend a string message to a specified mailbox

Опис

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

Appends a string message to the specified folder.

Параметри

imap

Примірник IMAP\Connection.

folder

The mailbox name, see imap_open() for more information

Увага

Передавати у цей параметр неперевірені дані небезпечно, якщо увімкнено imap.enable_insecure_rsh.

message

The message to be append, as a string

When talking to the Cyrus IMAP server, you must use "\r\n" as your end-of-line terminator instead of "\n" or the operation will fail

options

If provided, the options will also be written to the folder

internal_date

If this parameter is set, it will set the INTERNALDATE on the appended message. The parameter should be a date string that conforms to the rfc2060 specifications for a date_time value.

Значення, що повертаються

Повертає true у разі успіху або false в разі помилки.

Журнал змін

Версія Опис
8.1.0 Тепер параметр imap має бути примірником IMAP\Connection; раніше очікувався дійсний resource imap.
8.0.0 options and internal_date are now nullable.

Приклади

Приклад #1 imap_append() example

<?php
$imap
= imap_open("{imap.example.org}INBOX.Drafts", "username", "password");

$check = imap_check($imap);
echo
"Msg Count before append: ". $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"
. "this is a test message, please ignore\r\n"
);

$check = imap_check($imap);
echo
"Msg Count after append : ". $check->Nmsgs . "\n";

imap_close($imap);
?>

add a note

User Contributed Notes 4 notes

up
19
rixsta at hotmail dot com
12 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
10
Krzysiek
10 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() methodimap_append($imap, $mailserver.'INBOX.Sent',$mail->getSentMIMEMessage(), "\\Seen");
up
5
kaminski at istori dot com
14 years ago
The date format string to use when creating $internal_date is 'd-M-Y H:i:s O'.
up
1
jab_creations at yahoo dot com
6 months 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 formattedThe 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.
To Top