Прикрепить письмо с вложениями к другому письму - PullRequest
1 голос
/ 25 апреля 2011

Итак, я знаю, как отправлять электронные письма с вложениями ... это просто.

Теперь проблема в том, что мне нужно добавить MailMessage, у которого есть собственное вложение, в другой MailMessage.Это позволит пользователю просматривать вещи, получать предварительно подготовленное письмо и отправлять его, если все в порядке.

Я не уверен, что это будет окончательный рабочий процесс, но я хотел бы знать, еслилегко.

Я вижу кучу программного обеспечения, которое стоит денег, пользователи, получающие эти письма, будут использовать клиент Outlook.

Это будет развернуто на дешевом общем хостинге, должно быть в состоянии работать в Meduim Trust!

Я бы предпочел не лицензировать стороннее программное обеспечение, нет $: (

Любые идеи будут замечательными.

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

MailMessages не может быть присоединено к другим MailMessages. Что вы будете делать, это создать файл .msg, который в основном представляет собой файл, в котором хранится электронное письмо и все его вложения, и прикреплять его к вашему фактическому MailMessage. Файлы MSG поддерживаются Outlook.

Для получения дополнительной информации о расширении файла, перейдите сюда: http://www.fileformat.info/format/outlookmsg/

0 голосов
/ 04 ноября 2011

Как сказал Джастин, в API нет возможности присоединить одно MailMessage к другому.Я работал над этим, используя SmtpClient для «доставки» моего внутреннего сообщения в каталог, а затем прикрепил полученный файл к моему внешнему сообщению.Это решение не очень привлекательно, поскольку оно должно использовать файловую систему, но оно выполняет свою работу.Было бы намного чище, если бы SmtpDeliveryMethod имел опцию Stream.

Стоит отметить, что SmtpClient добавляет заголовки X-Sender / X-Receiver для информации конверта SMTP при создании файла сообщения.Если это проблема, вам придется удалить их с верхней части файла сообщения, прежде чем прикреплять его.

// message to be attached
MailMessage attachedMessage = new MailMessage("bob@example.com"
    , "carol@example.com", "Attached Message Subject"
    , "Attached Message Body");

// message to send
MailMessage sendingMessage = new MailMessage();
sendingMessage.From = new MailAddress("ted@example.com", "Ted");
sendingMessage.To.Add(new MailAddress("alice@example.com", "Alice"));
sendingMessage.Subject = "Attached Message: " + attachedMessage.Subject;
sendingMessage.Body = "This message has a message attached.";

// find a temporary directory path that doesn't exist
string tempDirPath = null;
do {
    tempDirPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
} while(Directory.Exists(tempDirPath));
// create temp dir
DirectoryInfo tempDir = Directory.CreateDirectory(tempDirPath);

// use an SmptClient to deliver the message to the temp dir
using(SmtpClient attachmentClient = new SmtpClient("localhost")) {
    attachmentClient.DeliveryMethod
        = SmtpDeliveryMethod.SpecifiedPickupDirectory;
    attachmentClient.PickupDirectoryLocation = tempDirPath;
    attachmentClient.Send(attachedMessage);
}

tempDir.Refresh();
// load the created file into a stream
FileInfo mailFile = tempDir.GetFiles().Single();
using(FileStream mailStream = mailFile.OpenRead()) {
    // create/add an attachment from the stream
    sendingMessage.Attachments.Add(new Attachment(mailStream
        , Regex.Replace(attachedMessage.Subject
            , "[^a-zA-Z0-9 _.-]+", "") + ".eml"
        , "message/rfc822"));

    // send the message
    using(SmtpClient smtp = new SmtpClient("smtp.example.com")) {
        smtp.Send(sendingMessage);
    }
    mailStream.Close();
}

// clean up temp
mailFile.Delete();
tempDir.Delete();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...