邮件与文件传输协议深度解析
立即解锁
发布时间: 2025-08-20 02:07:55 阅读量: 1 订阅数: 3 


深入浅出.NET网络编程
### 邮件与文件传输协议深度解析
#### 1. 邮件应用编程接口
##### 1.1 访问地址簿
MAPI 可用于访问 Microsoft Outlook 的大部分功能,这对于开发 Outlook 插件应用的开发者来说可能很有用。可以通过 MAPI 命名空间中的 AddressLists 集合来访问地址簿。该集合中的每个元素都包含一个 AddressEntries 集合,而后者集合中的每个条目都包含 Name 和 Address 属性,可用于从 Outlook 地址簿中提取电子邮件地址和姓名。
以下是创建读取 Outlook 地址簿应用的代码示例:
**C# 代码**:
```csharp
private void Form1_Load(object sender, System.EventArgs e)
{
ListViewItem liEmail;
Outlook.Application App;
Outlook.NameSpace NS;
App = new Outlook.Application();
NS = App.GetNamespace("mapi");
int ListsIndexer;
int EntriesIndexer;
Outlook.AddressList CurrentList;
Outlook.AddressEntry CurrentEntry;
for (ListsIndexer = 1; ListsIndexer <= NS.AddressLists.Count; ListsIndexer++)
{
CurrentList = NS.AddressLists.Item(ListsIndexer);
for (EntriesIndexer = 1; EntriesIndexer <= CurrentList.AddressEntries.Count; EntriesIndexer++)
{
CurrentEntry = CurrentList.AddressEntries.Item(EntriesIndexer);
liEmail = lvOutlook.Items.Add(CurrentEntry.Name);
liEmail.SubItems.Add(CurrentEntry.Address);
}
}
}
```
**VB.NET 代码**:
```vbnet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim liEmail As ListViewItem
lvOutlook.View = View.Details
Dim App As Outlook.Application = New Outlook.Application()
Dim NS As Outlook.NameSpace = App.GetNamespace("mapi")
Dim ListsIndexer As Integer
Dim EntriesIndexer As Integer
Dim CurrentList As Outlook.AddressList
Dim CurrentEntry As Outlook.AddressEntry
For ListsIndexer = 1 To NS.AddressLists.Count
CurrentList = NS.AddressLists.Item(ListsIndexer)
For EntriesIndexer = 1 To CurrentList.AddressEntries.Count
CurrentEntry = CurrentList.AddressEntries.Item(EntriesIndexer)
liEmail = lvOutlook.Items.Add(CurrentEntry.Name)
liEmail.SubItems.Add(CurrentEntry.Address)
Next
Next
End Sub
```
测试代码步骤如下:
1. 在 Outlook 中,通过“Tools→Address Book”检查 Outlook 地址簿中是否有条目。
2. 如果没有条目,点击“New→New Contact”添加一个联系人。
3. 从 Visual Studio .NET 运行上述应用程序,联系人的姓名和电子邮件地址将显示出来。
##### 1.2 IMAP 协议
Internet 消息访问协议(IMAP)运行在端口 143 上,RFC 1730 对其进行了明确描述。虽然 SMTP 和 POP3 是互联网上电子邮件通信的事实上的标准,但它们都是非常简单的协议,而 IMAP 是 POP3 的竞争技术。IMAP 比 POP3 功能更丰富,但出于某些原因,它的普及程度较低。
IMAP 服务器中存储的消息可以标记为已回复、标记、删除、已读、草稿或最近(仅提取)等状态。而在 POP3 中,消息要么存储,要么未删除。这些标记有助于在多个客户端上管理 IMAP 账户。
IMAP 协议的基本操作如下:
- **访问邮箱**:客户端必须使用用户名和密码进行身份验证,发送“login <username> <password>”,若用户名和密码正确,服务器回复“OK LOGIN completed”。
- **获取邮箱摘要信息**:客户端发送“select inbox”命令,服务器回复“* <number of messages> EXISTS”。
- **读取邮件**:客户端发送“fetch <number> full”命令(number 必须在 1 到“select inbox”命令响应的消息数量之间),服务器以 RFC 822 格式返回邮件正文,后跟消息结束标记“OK FETCH completed”。
- **删除邮件**:客户端发送“store <number> +flags \deleted”命令,服务器回复“OK +FLAGS completed”。
以下是 IMAP 服务器和客户端之间交互的示例:
```plaintext
S: * OK IMAP4 Service Ready
C: a001 login marc secret
S: a001 OK LOGIN completed
C: a002 select inbox
S: * 18 EXISTS
S: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
S: * 2 RECENT
S: * OK [UNSEEN 17] Message 17 is the first unseen message
S: * OK [UIDVALIDITY 3857529045] UIDs valid
S:,a002
```
0
0
复制全文
相关推荐









