i'm sorry i couldn't figure how to use ISmtpEmailSender in application service, i tried to inject it in my application service class but it's not registered. i had a look on the Test class, but i couldn't also inject ISmtpEmailSenderConfiguration but it's not registered. how to implement ISmtpEmailSender in application service layer and other layers Thank you
13 Answer(s)
-
0
I didn't find anything usefull in ISettingManager by creating a class then heritate ISettingManager....
The only thing i found usefull is ISmtpEmailSenderConfiguration but i dont know how to use it.... and how to link ISettingManager and ISmtpEmailSenderConfiguration!?
i just found in the doc this part, why configure it there if there is a ISmtpEmailSenderConfiguration?
public override IEnumerable<SettingDefinition> GetSettingDefinitions(SettingDefinitionProviderContext context) { return new[] { new SettingDefinition( "SmtpServerAddress", "127.0.0.1" ), ... }
-
0
Hi,
As I said, I haven't documented yet. So, it's a little long topic. But, briefly, ISmtpEmailSenderConfiguration is an abstraction. You can implement it to get configuration from any source. Default implementation gets configuration from ISettingManager. If you want to override it, implement ISmtpEmailSenderConfiguration yourself and register it to DI on PreInitialize of your module. ISettingManager needs to ISettingStore be implemented. It's implemented by module-zero.
So, as I said it's a little long topic. For now, you can use your own way to send emails if you can not solve the structure yourself. But I'll prepare docs in a few weeks.
-
0
Hi,
I'm using IEmailSender with success which in turn by default uses SmtpEmailSender. In my case added email functionality to existing notification infrastructure.
Check this [https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/Net/Mail/EmailSettingProvider.cs]) and [https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/Net/Mail/Smtp/SmtpEmailSender.cs])
All I had to do to get emails to work was to override some of default settings.
_settingManager.ChangeSettingForApplication(EmailSettingNames.Smtp.Host, ""); _settingManager.ChangeSettingForApplication(EmailSettingNames.Smtp.UserName, ""); _settingManager.ChangeSettingForApplication(EmailSettingNames.Smtp.Password, ""); _settingManager.ChangeSettingForApplication(EmailSettingNames.DefaultFromAddress, ""); _settingManager.ChangeSettingForApplication(EmailSettingNames.DefaultFromDisplayName, "");
To create email content either in IApplicationService or anywhere else I created :
public interface IEmailParser { MailMessage Parse(TenantNotification notification); }
And lastly I implemented IEmailParser in my Web project using Postal
https://github.com/andrewdavey/postal
Hope that helps
-
0
Hi @ismcagdas I implement it manually by my own way like this:
public class LIMSEmailSender : ILIMSEmailSender { private readonly SenderEmailConfig _senderEmailConfig; public LIMSEmailSender(SenderEmailConfig senderEmailConfig) { _senderEmailConfig = senderEmailConfig; } public void SendEmail(string to, string subject, string body) { MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient(_senderEmailConfig.SmtpClient); mail.From = new MailAddress(_senderEmailConfig.EmailAddress); mail.To.Add(to); mail.Subject = subject; mail.Body = body; mail.IsBodyHtml = true; SmtpServer.Port = _senderEmailConfig.SmtpPort; SmtpServer.Credentials = new System.Net.NetworkCredential(_senderEmailConfig.EmailAddress, _senderEmailConfig.Password); SmtpServer.EnableSsl = _senderEmailConfig.EnableSSL; SmtpServer.Send(mail); } }
and SenderEmailConfig implementation:
public class SenderEmailConfig : ISingletonDependency { public string EmailAddress { get; set; } public string Password { get; set; } public string SmtpClient { get; set; } public bool EnableSSL { get; set; } public int SmtpPort { get; set; } }
and initial SenderEmailConfig in web module's PreInitialize method like this
var limsEmail = IocManager.Resolve<SenderEmailConfig>(); limsEmail.EmailAddress= System.Configuration.ConfigurationManager.AppSettings["email"]; limsEmail.EnableSSL = Convert.ToBoolean(System.Configuration.ConfigurationManager.AppSettings["enableSSL"]); limsEmail.Password = System.Configuration.ConfigurationManager.AppSettings["emailPassword"]; limsEmail.SmtpClient = System.Configuration.ConfigurationManager.AppSettings["smtpClient"]; limsEmail.SmtpPort = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["smtpPort"]);
and finally I love This Framework