所以,我一直在c#中创建一个outlook加载项,用于读取电子邮件附件(PDF,Doc / Docx)并搜索我在附件中在搜索栏中输入的关键字。但问题是我可以通过电子邮件附件找到那些电子邮件,但它并没有给我正确的计数。我认为发生这种情况的原因是我无法正确检索附件中的单词。任何帮助将不胜感激谢谢!
到目前为止:
^应输出1
编辑:添加了我正在使用的代码,提供了意想不到的结果
private int countKeywords(Outlook.Attachment attachment, string keyword)
{
const string PR_ATTACH_DATA_BIN = "http://schemas.microsoft.com/mapi/proptag/0x37010102";
var attachmentData = attachment.PropertyAccessor.GetProperty(PR_ATTACH_DATA_BIN);
//MessageBox.Show(TextFromWord(attachment));
string data = System.Text.Encoding.Unicode.GetString(attachmentData);
int i = 0;
int startIndex = 0;
int count = 0;
if (data.Contains(" "))
{
while (i < data.Length)
{
if (data[i] == ' ' && data.Substring(startIndex, i - startIndex).Equals(keyword))
{
startIndex = i + 1;
count++;
}
i++;
}
}
else
{
if (data.Equals(keyword))
count++;
}
// MessageBox.Show(Encoding.GetString(attachmentData));
return count;
}
答案 0 :(得分:0)
首先,你真的在附件中有UTF-16编码数据吗?或者是单字节?使用ASCII编码而不是Unicode。
其次,请记住,OOM不允许您使用PropertyAccessor.GetProperty访问大型(32kB +)二进制属性。您需要将附件保存为文件(Attachment.SaveAsFile)或使用其他方法获取附件数据而不保存它(扩展MAPI或赎回)。
您是否尝试单步执行代码并检查变量值以确保获得所需的数据?