技术实现:smtplib模块实现邮件回复功能

一、半天方案都不理想

二、决定

1、存储发出报告的整个MIMEMultipart

2、后端提取出来,拼接成回复内容发出去

3、仅供参考,烦死我了,不用message id,死活找不到

在使用smtplib回复邮件时,可以在邮件正文中包含原邮件的内容,以实现引用某一封邮件的效果。具体步骤如下:

1. 获取原邮件的内容,可以使用Python内置的`imaplib`或第三方库`pyzmail`等来实现。

2. 在回复邮件的正文中,使用`>`符号来引用原邮件的内容。可以根据需要选择只引用部分内容或全部内容。

3. 将引用的原邮件内容和回复邮件的内容合并为一个字符串,作为回复邮件的正文。

4. 将合并后的字符串作为参数传递给`smtplib`的`sendmail`方法,发送回复邮件。

下面是一个示例代码,演示如何使用`smtplib`回复邮件并包含原邮件的内容:

```python
import smtplib
from email.mime.text import MIMEText

# 假设以下是原邮件的内容
original_content = """
Hi John,

This is the original email content.

Best regards,
Alice
"""

# 假设以下是回复邮件的内容
reply_content = """
Hi Alice,

This is my reply.

> {}
> On 2021-10-01, Alice wrote:
> > Hi John,
> >
> > This is the original email content.
> >
> > Best regards,
> > Alice

Best regards,
John
""".format(original_content.strip().replace('\n', '\n> '))

# 构造回复邮件的MIMEText对象
msg = MIMEText(reply_content)

# 设置邮件头部信息
msg['Subject'] = 'Re: Original email subject'
msg['From'] = 'john@example.com'
msg['To'] = 'alice@example.com'
msg['In-Reply-To'] = '<original-message-id@example.com>'
msg['References'] = '<original-message-id@example.com>'

# 发送邮件
smtp_server = 'smtp.example.com'
smtp_port = 587
smtp_username = 'john@example.com'
smtp_password = 'password'
smtp_conn = smtplib.SMTP(smtp_server, smtp_port)
smtp_conn.starttls()
smtp_conn.login(smtp_username, smtp_password)
smtp_conn.sendmail('john@example.com', 'alice@example.com', msg.as_string())
smtp_conn.quit()
```

在上面的示例代码中,`original_content`变量存储了原邮件的内容,`reply_content`变量存储了回复邮件的内容,其中使用`>`符号来引用原邮件的内容。在构造回复邮件的`MIMEText`对象时,设置了`In-Reply-To`和`References`头部信息,以指定回复邮件是针对哪一封原邮件的。最后调用`smtplib`的`sendmail`方法发送回复邮件。

三、做个邮件功能,做的都快得抑郁症了卧槽

1、由于不熟悉、再加上代码烂,迟迟确定不了方案

2、决定将MIMEMultipart对象整个存储,转为字符串存储

3、决定mysql采用中等的text进行存储

4、幸亏知道MIMEMultipart可以反序列化出来,不然我真疯了

5、需要取出来MIMEMultipart对象,进行修改内容,再次发送出去..因为我发现无法添加多个MIMETEXT

6、经过思考还是觉得不靠谱,几十万封邮件,全部存储的话,占用磁盘又大,如果增加开关,业务逻辑又太多了

四、改变方案,改由从邮箱中搜索邮件

1、缺点,无法继续使用flask_email去搜索邮件(无法读取)

Flask-Email是一个Flask扩展,用于发送电子邮件。如果您想要读取邮件,您需要使用Python的内置`imaplib`模块。以下是一个简单的示例,演示如何使用`imaplib`模块从Gmail收件箱中读取邮件

2、读取邮件逻辑需要自己封装一下,我还是跟GPT要一个吧

imaplib 读取发件箱

imaplib 读取发件箱,返回某个邮件的内容,同时再转发出去

五、我应该系统学一下邮件协议呀,不然写的多累

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值