Я написал метод сохранения вложений электронной почты Outlook на жесткий диск и преобразования файла в Base64String. Когда я сохранял вложения, встроенные (встроенные) изображения также сохранялись, даже если они не были НАСТОЯЩИМИ вложениями. Я хотел сохранить только настоящие вложения. Затем я изменил метод следующим образом. Но теперь я получаю ошибку из строки .OfType ().
Вот мой код:
private string GetBase64StringForAttachments(Outlook.MailItem mailItem)
{
StringBuilder builder = new StringBuilder();
Outlook.Attachments mailAttachments = mailItem.Attachments;
try
{
if (mailAttachments != null)
{
Regex reg = new Regex(@"<img .+?>", RegexOptions.Singleline | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
MatchCollection matches = reg.Matches(mailItem.HTMLBody);
for (int i = 1; i <= mailAttachments.Count; i++)
{
Outlook.Attachment currentAttachment = mailAttachments[i];
bool isMatch = matches
.OfType<Match>()
.Select(m => m.Value)
.Where(s => s.IndexOf("cid:" + currentAttachment.FileName, StringComparison.InvariantCultureIgnoreCase) >= 0)
.Any();
MessageBox.Show(currentAttachment.FileName + ": " + (isMatch ? "Inline Image" : "Attached Image"));
if (currentAttachment != null)
{
string date = DateTime.Now.ToString("yyyymmddhhmmss");
string path = "C:\\test\\" + date + currentAttachment.FileName; //ToDo: Create Folder
currentAttachment.SaveAsFile(path);
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] filebytes = new byte[fs.Length];
fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
string encodedData = Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);
builder.Append(encodedData).Append(",");
Marshal.ReleaseComObject(currentAttachment);
}
}
if (builder.Length > 0)
{
string encodedAttachments = builder.ToString().Remove(builder.ToString().Length-1);
return builder.ToString();
}
else
return "";
}
else return "";
}
catch (Exception ex)
{
Debug.DebugMessage(2, "Error in GetBase64StringForAttachments : in AddinModule " + ex.Message);
return "";
}
finally
{
Marshal.ReleaseComObject(mailAttachments);
}
}
Это сообщение об ошибке:
'System.Text.RegularExpressions.MatchCollection' не содержит определения для 'OfType' и не может быть найден метод расширения 'OfType', принимающий первый аргумент типа 'System.Text.RegularExpressions.MatchCollection' (отсутствует ли директива using или ссылка на сборку?)
Что мне нужно:
Я не большой поклонник LINQ. Итак, не могли бы вы посоветовать мне это?
Есть ли лучший способ сделать это?
Я уже пробовал следовать предложенным ответам на эти вопросы, и они не помогли мне
Сохранение только РЕАЛЬНЫХ вложений элемента Outlook MailItem
Не сохраняйте встраиваемые изображения в вложения (например, изображение подписи)
- Есть ли способ использовать Redemption для распознавания настоящих вложений?