Im Standard wird bei Asp Net Core MVC auf die Api-Schnittstelle
zum Email-Service Provider: EmailGrid verwiesen.
Man kann aber auch einfach einen eignen Email-Client
aufsetzen zu einem Email-Server wie MailEnable.
Mailenable ist ein kostenloses Email-System und läuft
stabil auf allen Windows Servern.
EmailSender
festlegen
Das Programm, welches die Emails definiert, sendet verarbeitet,
wird in der Datei Services/EmailSender.cs geschrieben.
Zu Beginn ist die Methode SendEmailAsync als Task leer.
EmailSender Default-Code:
Dieser Code muss in Asp.Net Core MVC geändert werden
// This class is used by the application
to send email for account confirmation and password reset.
// For more details see
https://go.microsoft.com/fwlink/?LinkID=532713
public class EmailSender : IEmailSender
{
public Task SendEmailAsync(string email, string subject, string message)
{
return Task.CompletedTask;
}
}
|
EmailSender:
Neuer Code
Email Code für MailEnable Server unter Asp.Net Core 2 MVC
Der Code kann auf Pop, SMTP SSL eingestellt werden.
Hier der Code für
einen einfachen pop-Client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net; //NetworkCredential
using System.Net.Mail; //SmtpClient
using System.Threading.Tasks;
namespace Readdy.Services
{
// This
class is used by the application to send email for account confirmation and
password reset.
public class EmailSender : IEmailSender
{
public async Task SendEmailAsync(string To_Email_Address, string subject, string message)
{
//------------< SendEmailAsync()
>------------
//< check >
if (To_Email_Address == null) return;
//todo
<bool>=false
//</ check >
try
{
//< init >
string sFrom_Email_Address = "test@domain.de";
string sFrom_Email_DisplayName = "Mailservice";
string sSenderAppname = "Readdy.Net";
string sHost = "pop.domain.de";
int intPort = 25;
string sEmail_Login = "your_login_on_Email_Server@domain.de";
string sEmail_Passwort = "your_passwort_for_smtp_server";
//</ init >
//-< setup Email >-
MailMessage email = new MailMessage();
email.To.Add(new MailAddress(To_Email_Address));
email.From=new
MailAddress(sFrom_Email_Address,sFrom_Email_DisplayName);
email.Subject =
sSenderAppname + "
" +
subject;
email.Body = message;
email.IsBodyHtml = true;
//email.Priority = MailPriority.High;
//-</ setup Email >-
//-< EmailClient >-
SmtpClient smtp = new SmtpClient();
smtp.Host = sHost;
smtp.Port = intPort;
smtp.Credentials = new NetworkCredential(sEmail_Login,
sEmail_Passwort);
smtp.EnableSsl = false;
//-</ EmailClient >-
//< send >
await smtp.SendMailAsync(email);
//</ send >
}
catch (Exception ex)
{
//do something here
Console.WriteLine("Error EmailSender.cs
error:" +
ex.InnerException);
}
//return
true;
//------------</
SendEmailAsync() >------------
}
}
}
|
Weitere Einstellungen
Task: ForgotPasswort
ändern
Wenn man den Email-Server testen möchte, dann kann man
dieses über die Email-Confirmation ausführen.
https://Readdy.Net/Account/ForgotPassword
Änderung
Task:ForgotPasswort
Die Methode ForgotPasswort prüft ob der User vorhanden
ist und ob die Email schon bestätigt wurde.
Nach meiner Ansicht kann die Abfrage: User.IsEmailConfirmded ausschalten
werden.
Code in
Controller/AccountController/ForgotPasswort
Die gelbe Zeile ausmarkieren
public async Task<IActionResult>
ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await
_userManager.FindByEmailAsync(model.Email);
if (user == null)
//|| !(await
_userManager.IsEmailConfirmedAsync(user))
{
// Don't reveal that the user does not
exist or is not confirmed
return
RedirectToAction(nameof(ForgotPasswordConfirmation));
}
..
..
|
Die Abfrage EmailConfirmed bezieht sich auf die Asp.MVC Tabelle:
dbo.AspNetUsers und der Spalte: EmailConfirmed
Weitere Fehler
Beim Einstellen der Email-Verbindung können weitere Fehlermeldungen
vom Server kommen:
Error Message Mail-Server:
User
not local; please try a different path. The server response was: Sender address
is not valid for your login. Check your email program settings.
Solution:
Email_From
Address must exist
Error Message Mail-Server:
Syntax
error, command unrecognized. The server response was: Welcome to MailEnable
POP3 Server
Solution:
Port
Address is 25 not 110 on MailEnable Pop
Weitere
Informationen:
EmailSender
Interface
Unterhalb der EmailsSender.cs liegt die Datei
IEmailSender.cs.
Diese beinhaltet das sogenannte Interface. Das Interface
wird quasi als Vorlage verwendet, auf welches alle Email-Anwendungen zugeschneidert
werden.
Bei Verwendung des Asp Net MVC Core mit Email-Clients
über Net.Sy
Email Interface
public interface IEmailSender
{
Task SendEmailAsync(string email, string subject, string message);
}
|