Если все, что вы делаете, это прикрепляете строку, вы можете сделать это всего за две строки:
mail.Attachments.Add(Attachment.CreateAttachmentFromString("1,2,3", "text/csv");
mail.Attachments.Last().ContentDisposition.FileName = "filename.csv";
Мне не удалось заставить свою работать, используя наш почтовый сервер с StreamWriter.
Я думаю, возможно, потому, что с StreamWriter вам не хватает информации о свойствах файла, и, возможно, нашему серверу не понравилось то, что отсутствовало.
С помощью Attachment.CreateAttachmentFromString () он создал все, что мне было нужно, и отлично работает!
В противном случае я бы предложил взять ваш файл, который находится в памяти, и открыть его с помощью MemoryStream (byte []), и пропустить StreamWriter все вместе.