【问题标题】:how to send all gmail drafts using c# or python如何使用 c# 或 python 发送所有 gmail 草稿
【发布时间】:2014-04-22 21:42:27
【问题描述】:

我总是使用 gmail 来保存网络剪辑或笔记。我只是创建一个新邮件,编辑它并保存为草稿。两年多来,我在我的 Gmail 草稿文件夹中转储了 1000 多封邮件。我想以编程方式将它们全部发送给我自己。我做了一些研究,现在我可以使用 python 或 c# 通过 IMAP 加载我的 gmail 收件箱消息,或者创建邮件并通过 SMTP 发送。但是,我仍然无法阅读草稿消息并将其发送给自己。

(为什么我使用 GMail 作为笔记存储,而不是使用 Evernote、MS onenote 或 Apple notes 等笔记应用程序?因为电子邮件在任何平台或设备上都得到了更好的支持。通常预装了电子邮件客户端,而且更容易查找或定义“创建新邮件”键盘快捷键而不是“导出到印象笔记”键盘快捷键。)

【问题讨论】:

  • 为什么您需要将它们发送给自己?你不是已经可以访问它们了吗?
  • 三个原因:1.更容易查看。默认情况下,草稿邮件会在一个小文本框中打开。 2.更容易管理。它越来越大,我不希望在我的笔记中混入一些真正的草稿电子邮件。 3.草稿消息是可编辑的,因此可能会被误删除。例如,一旦我错误地按下剪切而不是复制,然后空消息被自动保存......
  • 打开草稿文件夹 [Gmail]/Drafts,获取每封电子邮件的整个正文,然后通过 SMTP 将它们发送给您自己。可能根据需要调整标题的 From 和 To 行。

标签: c# python smtp gmail imap


【解决方案1】:

如果你使用MailKit,你会这样做:

using System;
using System.Net;
using System.Threading;

using MailKit.Net.Imap;
using MailKit.Net.Smtp;
using MailKit;
using MimeKit;

namespace TestClient {
    class Program
    {
        public static void Main (string[] args)
        {
            using (var client = new ImapClient ()) {
                var credentials = new NetworkCredential ("jimbo", "password");

                client.Connect (new Uri ("imaps://imap.gmail.com"), CancellationToken.None);
                client.Authenticate (credentials, CancellationToken.None);

                var folder = client.GetFolder (SpecialFolder.Drafts);
                folder.Open (FolderAccess.ReadWrite, CancellationToken.None);

                using (var smtp = new SmtpClient ()) {
                    smtp.Connect (new Uri ("smtps://smtp.gmail.com"), CancellationToken.None);
                    smtp.Authenticate (credentials, CancellationToken.None);

                    var indexes = new int[folder.Count];
                    for (int i = 0; i < folder.Count; i++) {
                        var message = folder.GetMessage (i, CancellationToken.None);

                        // if you haven't already specified a recipient, do it now:
                        message.To.Add (new MailboxAddress ("Jimbo", "jimbo@gmail.com"));

                        smtp.Send (message, CancellationToken.None);
                        indexes[i] = i;
                    }

                    // if you also want to delete the messages on the IMAP server:
                    folder.AddFlags (indexes, MessageFlags.Deleted, true, CancellationToken.None);
                    folder.Close (true, CancellationToken.None);

                    smtp.Disconnect (true, cancellationToken.None);
                }

                client.Disconnect (true, cancellationToken.None);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2018-02-26
    • 2015-08-27
    • 2021-04-28
    • 2022-07-26
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多