相关疑难解决方法(0)

将System.Net.Mail.MailMessage作为.NET 4.5 beta版中的MemoryStream

因此,下面的代码曾经在.NET 4中用于将System.Net.Mail.MailMessage对象作为MemoryStream获取,但是随着.NET 4.5 beta的发布,发生了运行时异常.

Assembly assembly = typeof(SmtpClient).Assembly;
Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
using (MemoryStream stream = new MemoryStream())
{
    ConstructorInfo mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
    object mailWriter = mailWriterContructor.Invoke(new object[] { stream });
    MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
    sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true }, null);

    .....
}
Run Code Online (Sandbox Code Playgroud)

sendMethod.Invoke()上发生运行时异常.

c# .net-4.5

22
推荐指数
3
解决办法
1万
查看次数

使用System.Net.Mail.MailAddress或其他库指定.eml文件名

我需要在要求时提交电子邮件.

我的代码有效:

  • 发送电子邮件
  • 请求时提交电子邮件
  • 但是不允许我指定文件名(使用guid作为文件名)
  • 示例:c:\ Archive\email\1003d05d-11ca-45e2-a5f4-cf2da29c39d9.eml

潜在解决方案

  1. 将文件保存到临时文件夹,重命名文件,然后复制到最终目标
  2. 使用其他方法保存文件,性能更佳

优点和缺点

  • 解决方案1:丑陋且性能不佳

有没有人知道如何向"MySpecifiedFileName.eml"提交电子邮件,而无需重命名然后复制?

现有守则:

Public Shared Sub Send(ByVal EmailFrom As String, ByVal EmailTo As String, ByVal Subject As String, ByVal HTMLBody As String, Optional SaveToFile As Boolean = False, Optional SaveFilepath As String = "")
    Dim MyMsg As MailMessage = New MailMessage

    Dim Recipients() As String
    Recipients = Split(EmailTo, ";")

    With MyMsg
        .From = New System.Net.Mail.MailAddress(EmailFrom)
        For i = 0 To Recipients.Count - 1
            If Recipients(i).ToString <> "" Then …
Run Code Online (Sandbox Code Playgroud)

c# vb.net

12
推荐指数
1
解决办法
4006
查看次数

将System.Net.mail.MailMessage保存为.msg文件

我正在构建一个应用程序,我有义务创建一个MailMessage(System.Net.mail.MailMessage)并将其保存在磁盘上,因为.msg扩展名不是.eml

下面是我用来将MailMessage保存为.msg文件的方法:

   public static void Save(MailMessage Message, string FileName)
    {
        Assembly assembly = typeof(SmtpClient).Assembly;
        Type _mailWriterType =
          assembly.GetType("System.Net.Mail.MailWriter");

        using (FileStream _fileStream =
               new FileStream(FileName, FileMode.Create))
        {
            // Get reflection info for MailWriter contructor
            ConstructorInfo _mailWriterContructor =
                _mailWriterType.GetConstructor(
                    BindingFlags.Instance | BindingFlags.NonPublic,
                    null,
                    new Type[] { typeof(Stream) },
                    null);

            // Construct MailWriter object with our FileStream
            object _mailWriter =
              _mailWriterContructor.Invoke(new object[] { _fileStream });

            // Get reflection info for Send() method on MailMessage
            MethodInfo _sendMethod =
                typeof(MailMessage).GetMethod(
                    "Send",
                    BindingFlags.Instance | BindingFlags.NonPublic);

            // …
Run Code Online (Sandbox Code Playgroud)

.net c# email msg mailmessage

11
推荐指数
1
解决办法
3万
查看次数

发送保存在磁盘上的eml文件

我正在创建eml并使用此处提到的过程将它们保存到目录中.我想知道如何发送这些eml文件?我尝试使用SMTPClient类的对象,但它将MailMessage对象作为其参数,我无法找到并使用这些保存的eml文件创建MailMessage类型的对象.

c# email smtp eml

9
推荐指数
2
解决办法
2万
查看次数

生成要由客户下载并从其Outlook帐户发送的电子邮件

我正在处理的应用程序的一个要求是使用户能够向我们的服务台提交调试报告以查找致命错误(非常类似于Windows错误报告).

我被告知电子邮件必须来自客户的邮件帐户,以防止服务台收到垃圾邮件和大量重复的电话.

为了实现这一点,我正在尝试在服务器上撰写邮件消息,在帮助台的正文中添加一条好消息,并将错误报告作为附件,然后将其添加到响应中,以便用户可以下载,打开并发送.

我已经尝试过,但没有成功地使用Outlook互操作性组件,这是一个没有实际意义的因素,因为我在谷歌的最后6个小时发现,创建多个应用程序实例是非常耗费资源的.

c# asp.net email response

5
推荐指数
1
解决办法
1127
查看次数

使用 System.Net.Mail 保存并发送邮件

我正在尝试使用 C# 代码发送并保存发送电子邮件。但我无法完成这件事。我可以保存邮件,也可以发送邮件。但我无法同时完成这两件事。

这就是我所拥有的:

public ActionResult Index()
{
    MailMessage message = new MailMessage();

    message.From = new MailAddress("test@mail.com");
    message.To.Add(new MailAddress("mymail@gmail.com"));
    message.Subject = "Test Subject";
    message.Body = "This is a test message";
    message.IsBodyHtml = true;

    // Setup SMTP settings
    SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
    smtp.EnableSsl = true;
    NetworkCredential basicCredential = new NetworkCredential("mymail@gmail.com", "******");

    smtp.UseDefaultCredentials = false;
    smtp.Credentials = basicCredential;
    smtp.Send(message);

    // save
    smtp.EnableSsl = false;
    smtp.PickupDirectoryLocation = @"C:\Temp";
    smtp.Send(message); 

    return View();
}
Run Code Online (Sandbox Code Playgroud)

所以首先我尝试发送电子邮件。这样可行。然后我尝试将电子邮件保存到我的硬盘上。但它永远不会被保存。当我不发送电子邮件并尝试立即将其保存到我的硬盘时,它确实有效。但我需要两者都做。

有人知道我该如何完成这件事吗?我只需要记录发送消息。

.net c# email smtp

4
推荐指数
1
解决办法
9963
查看次数

保存自动生成的电子邮件?

可能重复:
如何将MailMessage对象保存为磁盘*.eml或*.msg文件

我正在开发一个C#程序,当满足某些条件时,它会向人们发送电子邮件.我希望能够保存电子邮件的副本以保存记录,但无法弄清楚.我觉得很奇怪,没有像它那样的内置功能message.Save().

我在下面列出了一个非常基本的电子邮件示例

MailMessage message = new MailMessage("from_email", "to_email");
message.Subject = "Email Alert"; 
message.Body = "This is a test email.";
SmtpClient Smtp = new SmtpClient("smtp server");
Smtp.Send(message);
Run Code Online (Sandbox Code Playgroud)

我想保存一份电子邮件以备记录.我并没有真正考虑存储消息的所有选择,对不起.我希望有副本,以防收件人没有收到我可以从存档转发他们的电子邮件.我认为.msg会很好用.

另外,我希望能够保存电子邮件,然后在一天结束时发送批处理.如果我收到需要添加的更新,我可能需要在电子邮件中添加新条目,以便收件人不会因多封电子邮件而过载.但是,在某些情况下会遇到升级级别,无论何时何时都会自动发送电子邮件.

c#

0
推荐指数
1
解决办法
1348
查看次数

标签 统计

c# ×7

email ×4

.net ×2

smtp ×2

.net-4.5 ×1

asp.net ×1

eml ×1

mailmessage ×1

msg ×1

response ×1

vb.net ×1