2012-06-13 8 views
1

В шаг за шагом руководство по адресу: https://github.com/smsohan/MvcMailer/wiki/MvcMailer-Step-by-Step-GuideКак сменить SMTP-клиент, пользователь и пароль динамически в MVC Mailer?

Утверждается, что .net почта Lib используется (System.Net.Mail).

В медицинских транзакциях необходимо изменить серверы на основе региона страны и записать, если почтовое сообщение было отправлено со статусом.

.net почта Lib будет делать это, но у меня есть проблема понимания, где поставить следующие части кода при использовании MVC Mailer:

.net Почта Lib ->

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

MVC Mailer-- >

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.

Спасибо за любой совет.

С уважением, Vic

ответ

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("[email protected]") 
                  i.Subject = "Boo!" 
                 End Sub) 
     mvcMailMessage.Send(Me.CustomMailSender) 
    End Sub 
End Class 

Да, я знаю, что это VB, но Я парень VB! :> Надеюсь, что это поможет :)