1
問題: 私は絶えず変化するクラスとデータからcsvファイルを作成し、添付ファイルとして電子メールで送信したいと考えています。MailKit電子メールアタッチメントfor .NET Core 2.0
良い: 次のコードを使用してcsvファイルを作成できます。
private IEnumerable<string> ToCsv<T>(string separator, IEnumerable<T> objectlist)
{
FieldInfo[] fields = typeof(T).GetFields();
PropertyInfo[] properties = typeof(T).GetProperties();
yield return String.Join(separator, fields.Select(f => f.Name).Union(properties.Select(p => p.Name)).ToArray());
foreach (var o in objectlist)
{
yield return string.Join(separator, (properties.Select(p => (p.GetValue(o, null) ?? "").ToString())).ToArray());
}
}
と
using (TextWriter tw = File.CreateText("filepath" + "filename"))
{
foreach (var line in ToCsv(",", data))
{
tw.WriteLine(line);
}
}
でそれを使用悪い:
string FromAddress = "[email protected]";
string FromAdressTitle = "Email Title";
string ToAddress = "[email protected]";
string ToAdressTitle = "To address Title";
string Subject = "RE: some subject line";
//Smtp Server
string SmtpServer = "smtp.gmail.com";
//Smtp Port Number
int SmtpPortNumber = 587;
var mimeMessage = new MimeMessage();
mimeMessage.From.Add(new MailboxAddress(FromAdressTitle, FromAddress));
mimeMessage.To.Add(new MailboxAddress(ToAdressTitle, ToAddress));
mimeMessage.Subject = Subject;
var builder = new BodyBuilder();
builder.Attachments.Add(@"filepath");
mimeMessage.Body = builder.ToMessageBody();
using (var client = new SmtpClient())
{
client.Connect(SmtpServer, SmtpPortNumber, false);
client.Authenticate("username", "password");
client.Send(mimeMessage);
client.Disconnect(true);
}
これは正常に動作しますが、私は、ファイルを作成したいが、代わりにメモリストリームから添付ファイルを作成していけません。出来ますか?
私はその部分を動作させることができました。しかし、今私は最適化する必要があります。私は質問を更新しました。見てください。 – LostCause
BodyBuilder.Attachments.Add()にはストリームが必要なオーバーロードが含まれています。このオーバーライドでは、 'fileName'パラメータは単にfilenameプロパティを設定するために使用されます。 – jstedfast