I'm trying to send e-mails which an e-mail client will collect together under the same thread.
I am trying to do this using the In-Reply-To header, or the References header.
This is how I add them:
$this->withSwiftMessage(function ($message) use ($header, $messageId) {
$headers = $message->getHeaders();
$headers->addTextHeader('X-SMTPAPI', $header);
$headers->addTextHeader('References', $messageId);
$headers->addTextHeader('In-Reply-To', $messageId);
});
The headers are showing in my mail:
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
References: 8def8ad2ba46673db3886aaef3bb230f#swift.generated
In-Reply-To: 8def8ad2ba46673db3886aaef3bb230f#swift.generated
but the messages are in separate threads (in Gmail).
Any ideas?
Mick
Related
What I want is to send raw header using SwiftMailer
Currently this is what I can do with SwiftMailer
// Create the message
$message = Swift_Message::newInstance();
$message->setSubject("This email is sent using Swift Mailer");
$message->setBody("You {fullname}, are our best client ever thanks " .
" to the {transactions} transactions you made with us.");
$message->setFrom("account#bank.com", "Your bank");
Using $message->setFrom() I can set the From field in the header but what I want is something like this
$rawHeader = 'MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="_=_swift_v4_1467746603_bb0677c43b2ba275b8602c907ef7228a_=_"
List-Unsubscribe: <http://go.proctorgallagher.com/unsubscribe/u/45802/41c5731bb75f7959e5880279725cb9b7b4f8996214976c36a0f93e36e88e7705/876424750>
X-Report-Abuse-To: abuse#pd25.com
x-job: 7215816_12853
--_=_swift_v4_1467746603_bb0677c43b2ba275b8602c907ef7228a_=_
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable'
$message->rawHeader($rawHeader);
Or something where I don't have to let the swiftmailer know that Content-Type is field and value is text/plain
I mean whatever I put get sent as it is don't have to put everything separately.
Have you tried:
$message->setBody("You {fullname}, are our best client ever thanks " .
" to the {transactions} transactions you made with us.", "text/plain", "utf-8");
App::uses('CakeEmail', 'Network/Email');
$Email = new CakeEmail();
$Email->to($emailContentArray['To']);
$Email->from(array($emailContentArray['From'] => Configure::read('FROM_NAME')));
$Email->subject($emailContentArray['Subject']);
$Email->emailFormat('both');
$response=$Email->send($emailContentArray['Body']);
if we check the resulting email it looks like:-
Content-Type: multipart/mixed; boundary="782f009f669cbcf2faafff59fe0eeb5d"
Content-Transfer-Encoding: 8bit
X-Identified-User: {:test25.xyzzzz.com:testttt.com} {sentby:program running on server}
--782f009f669cbcf2faafff59fe0eeb5d
Content-Type: multipart/alternative; boundary="alt-782f009f669cbcf2faafff59fe0eeb5d"
--alt-782f009f669cbcf2faafff59fe0eeb5d
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
<div>​<BR>Hi<BR><BR>Soon you will reach the action limit. To keep yourself updated please pay the payment.<BR><BR> Happy to have you<BR><BR>Thanks,<BR>Apps Team<BR>​</div>
--alt-782f009f669cbcf2faafff59fe0eeb5d
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit
<div>​<BR>Hi<BR><BR>Soon you will reach the action limit. To keep yourself updated please pay the payment.<BR><BR> Happy to have you<BR><BR>Thanks,<BR>Apps Team<BR>​</div>
In text/plain the email should not show the html tags - how can I get both html and plain text to be sent correctly?
Encode the content and the subject in base64:
"=?utf-8?b?".base64_encode($s)."?=";
And before sending the emails don't forget to set the header:
'Content-Transfer-Encoding: base64';
If I'm not wrong you can make to set header: $Email->setHeader('X-Content-Transfer-Encoding', 'base64');
You can take a look at Cakephp sending UTF-8 Emails and lineLength
And at http://book.cakephp.org/2.0/en/core-utility-libraries/email.html
I am sending emails using php's mail function. Some addresses in email clients such as aol, hotmail.com and msn are not receiving it. Gmail works fine! I find it strange as it can pass through Gmail but not others:
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers = "From: $from";
$headers .= "\r\nMIME-Version: 1.0\r\n" .
"Content-Type: multipart/mixed;\r\n" .
" boundary=\"{$mime_boundary}\"";
And then I am sending email using:
$ok = #mail($to, $subject, $message, $headers);
For diagnostic purposes $header string contains:
From: xxx#example.com
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="==Multipart_Boundary_xd31b2fcd6941ba77b38f866330c24944x"
and the $message string contains:
This is a multi-part message in MIME format.
--==Multipart_Boundary_x0dde39863d56158409aa962fc1dd9a3bx
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
The email message appears here
--==Multipart_Boundary_x0dde39863d56158409aa962fc1dd9a3bx
Content-Type: {"application/octet-stream"};
name="afile.pdf"
Content-Disposition: attachment;
filename="afile.pdf"
Content-Transfer-Encoding: base64
The attachment's contents here
--==Multipart_Boundary_x0dde39863d56158409aa962fc1dd9a3bx
Some addresses in email clients such as aol, hotmail.com and msn are not receiving it
Your code is not the best place to start investigating this - check your email logs and bounce messages in the first place. The most likely cause is that your email is being flagged as a spam. You could verify this by setting up a mailbox yourself and sending mesages to it. How to prevent your emails being flagged as spam is a question which has been asked and answered here many times.
I am not sure whether the header is correct
It would have been mkore helpful to see an example of the email and headers generated (trimed down to a sensible size).
I have a small "problem" with Zend_Mail_Storage_Imap and MultiPart Mails.
ContentType: multipart/alternative;
boundary=f46d043bd88a9f5d9004c87d2ad3
Part 1 has the Text of the Message, but with headers inside the content, so when i try
$part->getContent();
--f46d043bd88a9f5d9004c87d2ad3 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hallo
is the result, how to extract the header information now?
Instead of:
$part->getContent();
do:
$part->getHeader();
to get Headers or if you want ONLY content then:
try:
while ($part->isMultipart()) {
$part = $message->getPart(1);
}
or
$message = $mail->getMessage($messageNum);
for content without body.
If issue persists, check your mail on mail client's like Gmail. Sometimes, we add header information twice (accidentally) whilst sending the mail.
Hope this helps :)
So, I would like to use mail() to send registration emails for my website, however I'd like to make it look nice while falling back to good old plaintext when necessary; a mixed message email.
However I would like it to be sent from John Doe who's email is johndoe#example.com to recipient#example.com.
The HTML code should be <html><head><title>HTML email!</title></head><body><p>This is HTML!</p></body</html> and the plaintext message should be This is plaintext.
What would be the arguments to mail() to accomplish this? I know a lot of it deals with changing the header in some crazy way.
Thanks so much!
Use something like SwiftMailer instead, as it has nice things like header injection prevention. With that in mind, yes, you have to set custom headers and use a multi-part body to achieve what you want:
/***************************************************************
Creating Email: Headers, BODY
1- HTML Email WIthout Attachment!! <<-------- H T M L ---------
***************************************************************/
#---->Headers Part
$Headers =<<<AKAM
From: $FromName <$FromEmail>
Reply-To: $FromEmail
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="$boundary1"
AKAM;
#---->BODY Part
$Body =<<<AKAM
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="$boundary1"
This is a multi-part message in MIME format.
--$boundary1
Content-Type: text/plain;
charset="windows-1256"
Content-Transfer-Encoding: quoted-printable
$TextMessage
--$boundary1
Content-Type: text/html;
charset="windows-1256"
Content-Transfer-Encoding: quoted-printable
$HTMLMessage
--$boundary1--
AKAM;
Source: http://www.php.net/manual/en/function.mail.php#83491
This is a lot of work. Which, once again, is why I recommend having a library that can handle all of this for you, plus other features.
Everything is here (Example #4): http://php.net/manual/en/function.mail.php