我一直在寻找一个库或至少是功能性的代码片段,可以让我从 Django(或至少在 Python 中)发送一封电子邮件,其中包含文本内容、HTML 内容和每个专业都认可的 ICS 日历附件电子邮件客户端。对于我的特定用例,如果向用户提供“添加到日历”按钮就足够了。
我觉得现在这应该是一个已解决的问题,但我只找到引用未维护或以其他方式过时或不完整的库的答案。我已经测试了几个将附加 ICS 文件的片段,但 G-mail 没有给我像通常那样将其添加到日历的选项。
有我缺少的现成解决方案吗?
我想知道如何发送会议请求以允许GMail正确识别它?
如果您尝试发送iCalendar会议请求定义作为替代视图,使用习惯代码(也通过下面给出)通过MailMessage对象GMail,将导致未被识别的会议请求:

但是通过GMail UI发送的具有完全相同的会议请求的邮件会导致公认的会议请求!令人费解.

有人知道我错过了什么"魔法"吗?
很高兴注意到Outlook正确识别了给定代码发送的完全相同的会议请求.

使用会议请求发送邮件的代码:
class Program
{
static string From = "sender@example.com";
static string TimeFormat = "yyyyMMdd\\THHmmss\\Z";
static string To = "target@example.dom";
static void Main(string[] args)
{
string content = ReadFile("event-template.ics");
content = content.Replace("#TO#", To);
content = content.Replace("#FROM#", From);
content = content.Replace("#UID#", Guid.NewGuid().ToString().Replace("-", ""));
content = content.Replace("#CREATED-AT#", DateTime.UtcNow.AddDays(-1).ToString(TimeFormat));
content = content.Replace("#DTSTART#", DateTime.UtcNow.AddDays(1).ToString(TimeFormat));
content = content.Replace("#DTEND#", DateTime.UtcNow.AddDays(1).AddHours(1).ToString(TimeFormat));
MailMessage message = new MailMessage();
message.From = new MailAddress(From);
message.To.Add(new MailAddress(To));
message.Subject = "Meeting Request …Run Code Online (Sandbox Code Playgroud) 我有一个错误,TypeError:预期的类似字节的对象,而不是 NoneType。错误来自:encoders.encode_base64(eml_atch) line 56。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email.utils import COMMASPACE, formatdate
from email import encoders
import os,datetime
CRLF = "\r\n"
login = "my@email.com"
password = "mypassword"
attendees = ["attendees1@gmail.com", "attendees2@gmail.com","attendees3@gmail.com"]
organizer = "ORGANIZER;CN=organiser:mailto:first"+CRLF+" @ada-asia.com"
fro = "Fahim Maula <fahim.maula@ada-asia.com>"
ddtstart = datetime.datetime.now()
dtoff = datetime.timedelta(days = 1)
dur = datetime.timedelta(hours = 1)
ddtstart = ddtstart +dtoff
dtend = ddtstart + dur
dtstamp = datetime.datetime.now().strftime("%Y%m%dT%H%M%SZ")
dtstart = ddtstart.strftime("%Y%m%dT%H%M%SZ")
dtend …Run Code Online (Sandbox Code Playgroud) 我是 Python 新手,最近尝试了两种在 Outlook 365 上自动发送电子邮件的方法,其中一种比另一种更成功。我想问一下主要的区别是什么,因为它们看起来差别很大。
第一种方法本质上是《自动化无聊的东西》一书中概述的方法,使用 SMTP 或 IMAP。我尝试了这个,但没有让它工作,可能是因为使用办公室计算机的身份验证问题。
第二种方法对我有用,不涉及身份验证,我只需导入 win32com 客户端和以下代码:
outlook = client.Dispatch('Outlook.Application')
message = outlook.CreateItem(0)
message.Display()
message.To = "redacted"
message.CC = "redacted"
message.Subject = "Hello"
Run Code Online (Sandbox Code Playgroud)
我想问一下这两种方法的主要区别是什么。似乎第二个可能依赖于 Outlook 打开和我登录,但如果我的计算机进入睡眠状态,第一个也可以工作吗?
当我已经登录到 Windows 并无需输入用户 ID 和密码即可访问 Outlook 时,为什么还要采用涉及身份验证的第一种方法?
我认为这个问题对于其他刚接触 Python 和电子邮件自动化的人来说可能有用,因为他们在寻找解决方案时也可能会遇到这两种方法。