我知道这一点,但在 Outlook 2007 中存在错误或缺少功能。当您从收件人字段中删除(电子邮件地址)收件人时,mailItem 不会刷新其收件人集合。它仅在添加和解决收件人时刷新!
所以我看到的唯一方法是读取 To-Field 的内容是..通过 SendMessage。
private int EditStreamProc(MemoryStream dwCookie, IntPtr pbBuff, int cb, out int pcb)
{
pcb = cb;
byte[] buffer = new byte[cb];
Marshal.Copy(pbBuff, buffer, 0, cb);
dwCookie.Write(buffer, 0, cb);
return 0;
}
private delegate int EditStreamCallback(MemoryStream dwCookie, IntPtr pbBuff, int cb, out int pcb);
[StructLayout(LayoutKind.Sequential)]
private struct EDITSTREAM
{
public MemoryStream dwCookie;
public int dwError;
public EditStreamCallback pfnCallback;
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg, uint wParam, ref EDITSTREAM lParam);
private const int WM_USER = 0x0400;
private const int SF_RTF =3;
private const int EM_STREAMOUT = WM_USER + 74;
public string ReadRTFContentInOL2007(IntPtr handle)
{
string result = String.Empty;
using (System.IO.MemoryStream stream = new MemoryStream())
{
EDITSTREAM editStream = new EDITSTREAM();
editStream.pfnCallback = new EditStreamCallback(EditStreamProc);
editStream.dwCookie = stream;
SendMessage(handle, EM_STREAMOUT, SF_RTF, ref editStream);
stream.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
}
return result;
}
当电子邮件地址被解析后,我会收到这个:
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}} {*\generator Riched20 12.0.6606.1000;}\viewkind4\uc1 \pard\f0\fs17 {\pict\wmetafile0
所以 Outlook 将纯文本替换为对象,我需要接收 RTF 内容的所有信息!我认为此内容中的某处必须是电子邮件地址。 To - 字段类是:RichEdit20WPT