Пока вы знаете, что Outlook будет установлен на всех клиентах, решение Outlook работает очень хорошо.Вы можете создать файл и сохранить его, а затем в своем взаимодействии с Outlook вы просто присоедините и отправите.Вы не указали, какие инструменты вы используете, но вот основной метод создания электронной почты, который я использую для Outlook в C # (где OutlookSetup.OutlookApp - это просто статический метод, который возвращает открытый в данный момент экземпляр приложения Outlook или создает новый, если Outlookне открыт)В противном случае на SO есть несколько примеров использования SmtpClient для достижения аналогичных целей.
public EmailMessage(EmailInfo emailInfo, string filenameToAttach=null)
{
Message = OutlookSetup.OutlookApp.CreateItem(OL.OlItemType.olMailItem);
Message.To = emailInfo.To;
Message.CC = emailInfo.Cc ?? "";
Message.Subject = emailInfo.Subject;
if (filenameToAttach != null)
{
Message.Attachments.Add(filenameToAttach);
}
}