【问题标题】:How do I change the SMTP Client, User and Password dynamically in MVC Mailer?如何在 MVC Mailer 中动态更改 SMTP 客户端、用户和密码?
【发布时间】:2012-06-13 22:58:55
【问题描述】:

在分步指南中: https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-Guide

据说使用的是.net邮件库(System.Net.Mail)。

在医疗交易中,需要根据国家地区更换服务器,并记录邮件是否发送状态。

.net 邮件库会执行此操作,但在使用 MVC 邮件程序时我无法理解将以下代码段放在哪里:

.net 邮件库-->

SmtpClient client = new SmtpClient(server, port);
client.credentials = CredentialCache.DefaultNetworkCredentials;

MVC 邮件程序-->

public ActionResult SendWelcomeMessage()
{
    UserMailer.SmtpClient(server, port);
    UserMailer.credentials = CredentialCache.DefaultNetworkCredentials;
    UserMailer.Welcome().SendAsync();


    return RedirectToAction("Index");
}

    static bool mailSent = false;
    private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
    {
        // Get the unique identifier for this asynchronous operation.
         String token = (string) e.UserState;

        if (e.Cancelled)
        {
             Console.WriteLine("[{0}] Send canceled.", token);
        }
        if (e.Error != null)
        {
             Console.WriteLine("[{0}] {1}", token, e.Error.ToString());
        } else
        {
            Console.WriteLine("Message sent.");
        }
        mailSent = true;
    }

如果 MailSent 为 false,则写入严重日志错误。

我不确定 .net 设置的客户端设置应该放在哪里。 他们应该像我在上面所做的那样进入控制器还是进入 Mailer 方法。

感谢您的建议。

问候, 维克

【问题讨论】:

    标签: smtpclient mvcmailer


    【解决方案1】:

    我也有同样的需要。

    为此,我创建了一个自定义邮件发件人类:

     Public Class CustomMailSender
            Inherits System.Net.Mail.SmtpClient
            Implements ISmtpClient       
    
        Public Sub Init(senderEmail As String, password As String)
            Me.Credentials = New System.Net.NetworkCredential(senderEmail, password)
        End Sub
    
        Public Overloads Sub SendAsync(mail As MailMessage) Implements ISmtpClient.SendAsync
            MyBase.SendAsync(mail, Nothing)
        End Sub
    
        Public Overloads Sub SendAsync(mail As MailMessage, userToken As Object) Implements ISmtpClient.SendAsync
            MyBase.SendAsync(mail, userToken)
        End Sub
    
        Public Overloads Sub Send(mail As MailMessage) Implements ISmtpClient.Send
            MyBase.Send(mail)
        End Sub
    
        Public Shadows Event SendCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Implements ISmtpClient.SendCompleted
    
    End Class
    

    然后在您的电子邮件控制器中,您可以这样使用它

    Public Class EmailController
            Inherits MailerBase
    
        Public Sub New()
            MyBase.New()
            Me.CustomMailSender = New CustomMailSender
        End Sub
    
        Public Property CustomMailSender As CustomMailSender
    
        Public Sub Sample()
            Dim mvcMailMessage As MvcMailMessage = Populate(Sub(i)
                                                                i.ViewName = "Sample"
                                                                i.To.Add("some1@somewhere.org")
                                                                i.Subject = "Boo!"
                                                            End Sub)
            mvcMailMessage.Send(Me.CustomMailSender)
        End Sub
    End Class
    

    是的,我知道那是 VB,但我是 VB 人! :> 希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2021-06-04
      相关资源
      最近更新 更多