Я использую Gmail API (используя код PHP) для отправки электронных писем. Если я отправляю электронное письмо самому себе, я могу прекрасно просматривать его в клиенте Gmail (телефоне и в Интернете), но тело не отображается в клиенте Outlook для настольных ПК. Однако любой человек, которому я отправляю CC или BCC в один и тот же адрес электронной почты, может прекрасно видеть полное сообщение в клиенте Outlook.
Кажется, что отправленные вам сообщения не будут отображать содержимое тела в Outlook, но все остальные могутувидеть то же сообщение отлично. Если кто-то еще отправит мне письмо и отправит мне CC, я тогда увижу содержимое.
Есть ли в Outlook какое-то требование для отображения сообщений, отправленных самому себе, или есть какой-то заголовок, который нужно отправить сGMAIL API.
Сводка. Если я отправитель, я не могу видеть содержимое сообщения в Outlook. Если я получатель, но не отправитель, в Outlook Client все отлично отображается.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* NEW WORKING VERSION
* @param $arg_email_data
* @param bool $arg_attachments
*/
public function sendMessage($arg_email_data, $arg_attachments = false) {
//
// DO NOT MOVE THE SECTIONS AROUND, AS THIS MIGHT BREAK THE CONTENT STRUCTURE
//
$this->client->setConfig('subject', $arg_email_data['from']);
$strMailContent = $arg_email_data['body'];
$strRawMessage = "";
$subjectCharset = $charset = 'utf-8';
$strSesFromName = $arg_email_data['from_name'];
$strSesFromEmail = $arg_email_data['from'];
$strSubject = $arg_email_data['subject'];
//boundary definitions - DO NOT CHANGE
$boundary = uniqid(rand(), true);
$strStartBoundary = "\r\n--{$boundary}\r\n";
$strEndBoundary = '--' . $boundary . "\r\n";
//to
$strToMailName = isset($arg_email_data['to_name']) ? $arg_email_data['to_name'] : $arg_email_data['to'];
$strRawMessage .= 'To: ' .$strToMailName . " <" . $arg_email_data['to'] . ">" . "\r\n";
//cc
if(isset($arg_email_data['cc']) && !empty($arg_email_data['cc'])) {
$strRawMessage .= $this->add_recipient_list("cc", $arg_email_data["cc"]);
}
//bcc
if(isset($arg_email_data['bcc']) && !empty($arg_email_data['bcc'])) {
$strRawMessage .= $this->add_recipient_list("bcc", $arg_email_data["bcc"]);
}
//from
$strRawMessage .= 'From: '.$strSesFromName . " <" . $strSesFromEmail . ">" . "\r\n";
//Subject
$strRawMessage .= 'Subject: =?' . $subjectCharset . '?B?' . base64_encode($strSubject) . "?=\r\n";
//TODO - Add reply to tag
// SECTION --------------------------------------------------------------
$strRawMessage .= 'MIME-Version: 1.0' . "\r\n";
//Mixed Content Type - SHOULD BE AT TOP ACCORDING TO MIME
$strRawMessage .= 'Content-type: Multipart/Mixed; boundary="' . $boundary . '"' . "\r\n";
// SECTION --------------------------------------------------------------
// TEXT ONLY VERSION - DO NOT MOVE
if(1==2) { //WE DON'T SEND PLAIN TEXT MAILS ANY LONGER
//$strRawMessage .= "\r\n--{$boundary}\r\n";
$strRawMessage .= $strStartBoundary;
$strRawMessage .= 'Content-Type: text/plain; charset=' . $charset . "\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: 7bit' . "\r\n\r\n";
$strRawMessage .= 'This is a text body' . "\r\n";
$strRawMessage .= $strEndBoundary;
}
// END SECTION --------------------------------------------------------------
// SECTION --------------------------------------------------------------
//HTML Section - DO NOT MOVE
$strRawMessage .= $strStartBoundary;
$strRawMessage .= 'Content-Type: text/html; charset=' . $charset . "\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n";
$strRawMessage .= $strMailContent . "\r\n";
$strRawMessage .= $strEndBoundary;
// END SECTION --------------------------------------------------------------
// SECTION --------------------------------------------------------------
// ATTACHMENTS - DO NOT MOVE
if(1==1) {
if ($arg_attachments && count($arg_attachments) > 0) {
foreach ($arg_attachments as $attachment) {
$filePath = $attachment['filepath'];
$finfo = @finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$mimeType = finfo_file($finfo, $filePath);
$fileName = $attachment['filename'];
$strRawMessage .= $strStartBoundary;
$strRawMessage .= 'Content-Type: ' . $mimeType . '; name="' . $fileName . '";' . "\r\n";
$strRawMessage .= 'Content-ID: <' . $strSesFromEmail . '>' . "\r\n";
$strRawMessage .= 'Content-Description: ' . $fileName . ';' . "\r\n";
$strRawMessage .= 'Content-Disposition: attachment; filename="' . $fileName . '"; size=' . filesize($filePath) . ';' . "\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: base64' . "\r\n\r\n";
$strRawMessage .= chunk_split(base64_encode(file_get_contents($filePath)), 76, "\n") . "\r\n";
//$strRawMessage .= base64_encode(file_get_contents($filePath)) . "\r\n";
$strRawMessage .= $strEndBoundary;
}
}
}
// END SECTION --------------------------------------------------------------
//Send the Message Mails
//Prepare the message in message/rfc822
try {
// The message needs to be encoded in Base64URL
$mime = rtrim(strtr(base64_encode($strRawMessage), '+/', '-_'), '=');
$msg = new Google_Service_Gmail_Message();
$msg->setRaw($mime);
if($this->service->users_messages->send($strSesFromEmail, $msg)) {
//echo 'sent';
return true;
} else {
echo('Failed');
//$this->slack->send(json_encode($arg_email_data), 'integra-errors');
}
} catch (Exception $e) {
$this->slack->send($e->getMessage() . 'MSG: ' . json_encode($arg_email_data), 'integra-errors');
print($e->getMessage());
unset($_SESSION['access_token']);
}
return false;
}
Я ценю, что большинство людей спросят: «Почему вы хотите отправлять сообщения себе?»но наши сотрудники по продажам отправляют предложение клиенту, ему нравится, когда его электронная почта отправляется в CC, чтобы у него была запись предложения, которое они отправили в свой почтовый ящик.
Это хорошо для тех, кто использует Gmail в браузере, но некоторые наши сотрудники используют Outlook (по другим причинам), и это вызовет у них проблемы.
Будем благодарны за любые мысли и идеи. .
С уважением
Джеймс