Я понял, как это сделать, и это было не так сложно, как казалось.
Создайте следующее в своем пространстве имен webservice:
`
[Serializable]
public class MyAttachment
{
[DataMember]
public string Name { get; set; }
[DataMember]
public byte[] Bytes { get; set; }
}`
Затем добавьте следующее к параметрам вашего веб-метода:
MyAttachment[] attachment
Добавьте следующее в блоки исполнения вашего веб-метода: `
foreach (var item in attachment)
{
Stream attachmentStream = new MemoryStream(item.Bytes);
Attachment at = new Attachment(attachmentStream, item.Name);
msg.Attachments.Add(at);
}`
Создайте следующее свойство (или что-то подобное) на стороне клиента:
`
private ObservableCollection<ServiceProxy.MyAttachment> _attachmentCollection;
public ObservableCollection<ServiceProxy.MyAttachment> AttachmentCollection
{
get { return _attachmentCollection; }
set { _attachmentCollection = value; NotifyOfPropertyChange(() => AttachmentCollection); }
}`
Новое открытое свойство (AttachmentCollection) в конструкторе.
Добавьте следующее, где ваш OpenFileDialog должен возвращать файлы: `
if (openFileDialog.File! = Null)
{
foreach (FileInfo fi in openFileDialog.Files)
{
var tempItem = new ServiceProxy.MyAttachment();
tempItem.Name = fi.Name;
var source = fi.OpenRead();
byte[] byteArray = new byte[source.Length];
fi.OpenRead().Read(byteArray, 0, (int)source.Length);
tempItem.Bytes = byteArray;
source.Close();
AttachmentCollection.Add(tempItem);
}
}`
И наконец, когда вы вызываете свой веб-метод для отправки электронного письма, добавьте следующее (или нечто подобное):
MailSvr.SendMailAsync(FromAddress, ToAddress, Subject, MessageBody, AttachmentCollection);
Это работает для меня, вложение отправляется вместе с почтой, со всеми данными, точно такими же, как в исходном файле.