2017-09-22 13 views
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); 
       } 

これは正常に動作しますが、私は、ファイルを作成したいが、代わりにメモリストリームから添付ファイルを作成していけません。出来ますか?

答えて

1

BodyBuilderクラスを見て、添付ファイルのリストを作成してください。

MimeMessage.Attachmentsプロパティは常にIEnumerableであるため、このように添付ファイルを追加することはできませんでした。

+0

私はその部分を動作させることができました。しかし、今私は最適化する必要があります。私は質問を更新しました。見てください。 – LostCause

+0

BodyBuilder.Attachments.Add()にはストリームが必要なオーバーロードが含まれています。このオーバーライドでは、 'fileName'パラメータは単にfilenameプロパティを設定するために使用されます。 – jstedfast

関連する問題