假设我们有一个充当中间人的应用程序,允许A公司向其客户发送报告.
公司A - >公司B(我) - >公司A的客户
收到报告后,我们会向收件人发送电子邮件通知,但这些通知必须来自我们公司的通知电子邮件地址,例如
joe.bloggs@a.com - > notifications@b.com - > peter@c.com
现在,客户倾向于回复这些电子邮件通知,希望他们回到在A公司发送报告的人.相反,他们最终回到我们的地址notifications@b.com.
一个简单的解决方案可能是更改我们发送到相关公司A地址的通知的回复标题,例如
joe.bloggs@a.com - > notifications@b.com [回复:joe.bloggs@a.com] - > peter@c.com
但我主要担心的是:
这些问题是否始终存在?或者,我应该有其他问题吗?
我的PHP脚本向用户发送电子邮件,当电子邮件到达其邮箱时,主题行($subject)包含a^£添加到主题文本末尾的字符.这显然是编码问题.电子邮件内容本身很好,只是主题行被打破.
我已经搜遍了所有,但无法找到如何正确编码我的主题.
这是我的标题.请注意,我使用Content-Type同charset=utf-8和 Content-Transfer-Encoding: 8bit.
//set all necessary headers
$headers = "From: $sender_name<$from>\n";
$headers .= "Reply-To: $sender_name<$from>\n";
$headers .= "X-Sender: $sender_name<$from>\n";
$headers .= "X-Mailer: PHP4\n"; //mailer
$headers .= "X-Priority: 3\n"; //1 UrgentMessage, 3 Normal
$headers .= "MIME-Version: 1.0\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "Importance: 3\n";
$headers .= "Date: $date\n";
$headers .= "Delivered-to: $to\n";
$headers .= "Return-Path: $sender_name<$from>\n";
$headers .= "Envelope-from: $sender_name<$from>\n";
$headers .= "Content-Transfer-Encoding: 8bit\n";
$headers .= "Content-Type: …Run Code Online (Sandbox Code Playgroud) 是否有任何Python模块有助于解码各种形式的编码邮件标题,主要是主题,简单 - 比如说 - UTF-8字符串?
以下是我拥有的邮件文件的示例主题标题:
Subject: [ 201105311136 ]=?UTF-8?B?IMKnIDE2NSBBYnM=?=. 1 AO;
Subject: [ 201105161048 ] GewSt:=?UTF-8?B?IFdlZ2ZhbGwgZGVyIFZvcmzDpHVmaWdrZWl0?=
Subject: [ 201105191633 ]
=?UTF-8?B?IERyZWltb25hdHNmcmlzdCBmw7xyIFZlcnBmbGVndW5nc21laHJhdWZ3ZW5kdW4=?=
=?UTF-8?B?Z2VuIGVpbmVzIFNlZW1hbm5z?=
Run Code Online (Sandbox Code Playgroud)
文本 - 编码的刺痛 - 文本
文本 - 编码的字符串
text - 编码的字符串 - 编码的字符串
Encodig也可能是ISO 8859-15之类的东西.
更新1:我忘了提,我试过了email.header.decode_header
for item in message.items():
if item[0] == 'Subject':
sub = email.header.decode_header(item[1])
logging.debug( 'Subject is %s' % sub )
Run Code Online (Sandbox Code Playgroud)
这输出
DEBUG:root:Subject是[('[201101251025] ELStAM; =?UTF-8?B?IFZlcmbDvGd1bmcgdm9tIDIx?=.Januar 2011',无)]
这没有什么帮助.
更新2:感谢Ingmar Hupp的评论.
第一个示例解码为两个tupels的列表:
print decode_header("""[201105161048] GewSt:=?UTF-8?B?IFdlZ2ZhbGwgZGVyIFZvcmzDpHVmaWdrZWl0?=""")
[('[201105161048] GewSt:',None),('Wegfall der Vorl\xc3\xa4ufigkeit', 'UTF-8')]
这总是[(字符串,编码),(字符串,编码),...]所以我需要一个循环将所有[0]项连接到一个字符串或如何在一个字符串中得到它?
主题:[201101251025] ELStAM; =?UTF-8?B?IFZlcmbDvGd1bmcgdm9tIDIx?=.Januar 2011
解码不好: …
谷歌搜索,没有找到任何东西......
有没有人知道,如果有一种方法,给定一个Outlook电子邮件项目,以检测它是否是由"外出办公室助手"发送的?Outlook是否在对象或任何标题信息上设置了标识电子邮件的属性?我希望不必解析"外出"等主题.
如果有一些标准会很好,所以也可以检测到来自其他电子邮件服务(如Gmail)的自动回复,但对我来说,Outlook是最高优先级.
我正在使用pythons imaplib连接到我的Gmail帐户.我想检索前15条消息(未读或读取,无关紧要)并仅显示主题和发件人姓名(或地址),但不知道如何显示收件箱的内容.
这是我到目前为止的代码(成功连接)
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('mygmail@gmail.com', 'somecrazypassword')
mail.list()
mail.select('inbox')
#need to add some stuff in here
mail.logout()
Run Code Online (Sandbox Code Playgroud)
我相信这应该很简单,我对imaplib库的命令还不够熟悉.任何帮助都必须得到赞赏......
更新 感谢Julian我可以遍历每条消息并检索整个内容:
typ, data = mail.search(None, 'ALL')
for num in data[0].split():
typ, data = mail.fetch(num, '(RFC822)')
print 'Message %s\n%s\n' % (num, data[0][1])
mail.close()
Run Code Online (Sandbox Code Playgroud)
但我只想要主题和发送者.是否有针对这些项目的imaplib命令,或者我是否必须解析文本的全部内容[0] [1]:主题和发件人?
更新 确定,让主题和发件人部分工作,但迭代(1,15)由desc命令完成,显然首先显示最旧的消息.我怎么能改变这个?我试过这样做:
for i in range( len(data[0])-15, len(data[0]) ):
print data
Run Code Online (Sandbox Code Playgroud)
但这只是给了我None所有15次迭代......任何想法?我也试过mail.sort('REVERSE DATE', 'UTF-8', 'ALL')但是gmail不支持.sort()函数
更新 找出一种方法:
#....^other code is the same as above except need to import email module …Run Code Online (Sandbox Code Playgroud) 格式化"发件人"电子邮件标题的标准方法是
From: John Doe <john.doe@example.com>
Run Code Online (Sandbox Code Playgroud)
但如果名字中有逗号,该怎么办?
From: John Doe, chief bottle washer <john.doe@example.com>
Run Code Online (Sandbox Code Playgroud)
如果我这样做,我的MTA会自动将其转换为:
From: John@this.server.com, Doe@this.server.com, chief bottle washer <john.doe@example.com>
Run Code Online (Sandbox Code Playgroud)
我的第一个猜测是在全名周围使用双引号,但我找不到任何官方文档确认这一点,我希望所有电子邮件客户端都能阅读我的电子邮件.
我想从我的php发送电子邮件:
$to = 'it@7sisters.in';
$email_from = "info@7sisters.in";
$full_name = 'Suraj Hazarika';
$from_mail = $full_name.'<'.$email_from.'>';
$subject = "testing sender name";
$message = "";
$message .= '
<p><strong>This is only a test . Please do not reply.</strong><br />
';
$from = $from_mail;
$headers = "" .
"Reply-To:" . $from . "\r\n" .
"X-Mailer: PHP/" . phpversion();
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to,$subject,$message,$headers);
Run Code Online (Sandbox Code Playgroud)
我正在关注教程PHP电子邮件表单发件人姓名而不是电子邮件?但我仍然收到带有主机名的发件人姓名的电子邮件.
From Date Subject
sisters@rsx02.justhost.com Fri, 11:24 pm testing sender …Run Code Online (Sandbox Code Playgroud) 我正在尝试将List-Unsubscribe标头添加到正在发送的电子邮件中.到目前为止,我没有运气这么做.
到目前为止我得到了什么:
var mailMessage = new MailMessage
{
Subject = newsletter.Subject,
Body = newsLetterHTML,
IsBodyHtml = true,
Sender = new MailAddress(senderAddress)
};
mailMessage.To.Add(subscriber.Email);
mailMessage.ReplyToList.Add(senderAddress);
mailMessage.Headers.Add("List-Unsubscribe", unSubscribeUrl);
Run Code Online (Sandbox Code Playgroud)
的unSubscribeUrl是一样的东西"www.example.com/unlist?id=8822772727".当我发送电子邮件时,一切正常,除了list-unsubscribe选项.哪个没有在任何邮件客户端中显示.
欢迎任何帮助!
更新
这是我用来发送电子邮件的完整代码:
var mailMessage = new MailMessage
{
Subject = newsLetter.Subject,
Body = newsLetterHTML,
IsBodyHtml = true,
Sender = new MailAddress(senderAddress)
};
mailMessage.To.Add(subscriber.Email);
mailMessage.ReplyToList.Add(senderAddress);
mailMessage.Headers.Add("List-Unsubscribe", String.Format("<{0}>", "http://www.foo.com/unlist?id=8888"));
mailMessage.HeadersEncoding = Encoding.Default;
var smtpClient = new SmtpClient();
smtpClient.Send(mailMessage);
Run Code Online (Sandbox Code Playgroud)
更新2
经过一番研究后,我将标题放入mailMessage中.当我发送电子邮件时,我可以看到以下标题:
List-Unsubscribe: <http://demo.localhost/home/hobbymap-gerard/afmelden-voor-nieuwsbrief?id=c786aeb0-554d-4670-94d8-82d6f25a050b>
MIME-Version: 1.0
From: info@test.nl
To: test@gmail.com
Reply-To: info@test.nl
Date: 8 …Run Code Online (Sandbox Code Playgroud) 我想改变Message-ID使用ActionMailer从Ruby on Rails v3应用程序发送的电子邮件的标题部分中的标题.
我在localhost上使用Sendmail进行邮件传递.
我在Sendmail或ActionMailer中配置它吗?
我在哪里配置它(如果它是ActionMailer):文件config/夹中的文件或app/mailers /文件夹中的文件?
你是那个了解电子邮件的程序员吗?你能想到邮件标题,闭着眼睛写它们吗?也许你可以帮我解决这个问题.
让我解释 ...
Inbox在我的应用程序中查找所有电子邮件在同一个应用程序中,用户可以发送新的电子邮件.我已经使用以下代码片段处理了这个问题.
$message = \Swift_Message::newInstance()
->setSubject($form->get('subject')->getData())
->setFrom('me@example.com')
->setTo($form->get('to'))
->setBody(
$this->renderView(
'MailBundle:Email:contact.html.twig',
array(
'ip' => $request->getClientIp(),
'name' => $form->get('to')->getData(),
'message' => $form->get('message')->getData()
)
)
)
;
Run Code Online (Sandbox Code Playgroud)
这很好用.如果提交了上述电子邮件,我会在IMAP发送文件夹中创建一封新电子邮件.反过来,它由PHP cronjob导入并放入MySQL数据库.它显示在我的应用程序中的已发送文件夹中.
现在您对我的应用程序的工作方式有了一个大概的了解,我有一些我不太确定的事情.
我想将我的应用程序用作真正的邮件客户端,并希望正确设置邮件头等.
我当然可以发送一封电子邮件,其中包含原始邮件正文,主题前面带有"RE:".但我不确定是不是全部.我不知何故怀疑我需要做更多.
我如何使用SwiftMailer来回复或转发保存在数据库中的电子邮件?
我按照这个问题的答案建议实现了回复标题.我不确定这是否也适用于转发.我只是想确保邮件提供商不会阻止我的电子邮件,因为标题不正确.