代码之家  ›  专栏  ›  技术社区  ›  LostCause

的MailKit电子邮件附件。NET Core 2.0

  •  1
  • LostCause  · 技术社区  · 7 年前

    我想从我不断变化的类和数据中创建一个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 = "myaddress@gmail.com";
                    string FromAdressTitle = "Email Title";
                    string ToAddress = "someaddress@domain.com";
                    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 回复  |  直到 7 年前
        1
  •  1
  •   jstedfast    7 年前

    看看BodyBuilder类来构造附件列表。