我试图显示已发送的文件夹,但它显示该文件夹中没有子文件夹。除收件箱外,所有文件夹都是空的。我正在使用以下代码。
using (var client = new ImapClient())
{
client.Connect(credentials.incoming_host, (int)credentials.incoming_port, credentials.incoming_ssl); //for SSL
client.Authenticate(credentials.email, credentials.password);
client.Inbox.Open(FolderAccess.ReadOnly);
var sentFolder= client.GetFolder(MailKit.SpecialFolder.Sent);
var Folders = client.GetFolders(client.PersonalNamespaces[0]);
client.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用同一文件夹发送电子邮件,然后将其附加如下:
var sentFolder = imapclient.GetFolder(SpecialFolder.Sent);
sentFolder.Append(message);
Run Code Online (Sandbox Code Playgroud)
我的 Outlook 确实检测到它并添加到已发送文件夹中。
来自 MailKit 自述文件:
如果 IMAP 服务器支持 SPECIAL-USE 或 XLIST (GMail) 扩展,您可以获取预定义的“全部”、“草稿”、“标记”(又名“重要”)、“垃圾”、“已发送”、“垃圾箱”等文件夹,如下所示:
if ((client.Capabilities & (ImapCapabilities.SpecialUse | ImapCapabilities.XList)) != 0) {
var drafts = client.GetFolder (SpecialFolder.Drafts);
} else {
// maybe check the user's preferences for the Drafts folder?
}
Run Code Online (Sandbox Code Playgroud)
如果 IMAP 服务器不支持 SPECIAL-USE 或 XLIST 扩展,您必须想出自己的启发法来获取“已发送”、“草稿”、“垃圾箱”等文件夹。例如,您可以使用与此类似的逻辑:
static string[] CommonSentFolderNames = { "Sent Items", "Sent Mail", "Sent Messages", /* maybe add some translated names */ };
static IFolder GetSentFolder (ImapClient client, CancellationToken cancellationToken)
{
var personal = client.GetFolder (client.PersonalNamespaces[0]);
foreach (var folder in personal.GetSubfolders (false, cancellationToken)) {
foreach (var name in CommonSentFolderNames) {
if (folder.Name == name)
return folder;
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
使用 LINQ,您可以将其简化为如下所示:
static string[] CommonSentFolderNames = { "Sent Items", "Sent Mail", "Sent Messages", /* maybe add some translated names */ };
static IFolder GetSentFolder (ImapClient client, CancellationToken cancellationToken)
{
var personal = client.GetFolder (client.PersonalNamespaces[0]);
return personal.GetSubfolders (false, cancellationToken).FirstOrDefault (x => CommonSentFolderNames.Contains (x.Name));
}
Run Code Online (Sandbox Code Playgroud)
另一种选择可能是允许应用程序的用户配置他或她想要用作其“已发送”文件夹、“草稿”文件夹、“废纸篓”文件夹等的文件夹。
如何处理这件事取决于你。
归档时间: |
|
查看次数: |
3172 次 |
最近记录: |