2

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

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

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

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

.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 为假,则写入严重日志错误。

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

感谢您的任何建议。

问候,维克

4

1 回答 1

0

我也有同样的需要。

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

 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 人!:> 希望这会有所帮助:)

于 2014-10-20T14:14:04.870 回答