Notify members by email, when new member is created
I'm still new to Umbraco, and I'm trying to wrap my head around some of the basics still.
Currently, I'm building a website, where my clients have a bunch of customers, which will be created as members on the website, so they can access parts of the website which are closed to the public.
My issue is, that I don't receive an email with login-credentials when I create a new member, using my own email address. I figure this is:
Because the member-system in Umbraco don't send out email with credentials per default
I messed something up in my web.config file or I need to do something in my web.config file.
Now, I'm pretty sure I've got a working mailserver referenced. It's a public SMTP-server on the webhotel, where the site is hosted, with no authentication needed, running on port 25 per default.
My question is: Is there some configuration I need to do, to get the built in membership-functionality to send out emails to the members that are being created, or do I need to tamper with umbracos default functionality, and write a class that does this?
I hope my question doesn't cause too much confusion. Please ask if you need me to ellaborate on something. Thanks!
I have the same question! My mail server is working as I get notifications for the Umbraco Forms submitted! I just need to email new members once their logins are created in the backoffice.
LogHelper.Error<MailHelper>("Error creating or sending contact mail, check if the is a mailFrom property has a value.", ex);
}
return false;
}
public class MailVariables
{
public string Content { get; set; }
public string Subject { get; set; }
public string To { get; set; }
public string Bcc { get; set; }
public string ToName { get; set; }
public string From { get; set; }
public string FromName { get; set; }
public string ReplyTo { get; set; }
public bool EnableSsl { get; set; }
}
}
Note that the only way for me to get the password (in the body of the email message) was to not encrypt the password. For that I changed the passwordFormat in the web.config from "Hashed" to "Clear":
Notify members by email, when new member is created
I'm still new to Umbraco, and I'm trying to wrap my head around some of the basics still.
Currently, I'm building a website, where my clients have a bunch of customers, which will be created as members on the website, so they can access parts of the website which are closed to the public.
My issue is, that I don't receive an email with login-credentials when I create a new member, using my own email address. I figure this is:
I have the same question! My mail server is working as I get notifications for the Umbraco Forms submitted! I just need to email new members once their logins are created in the backoffice.
Does anybody know how to do it in Umbraco 7.2.1?
Thanks in advance,
Gus
I have done it.
First I created a class RegisterEvents:
public class RegisterEvents : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication,
ApplicationContext applicationContext)
{
MemberService.Saved += MemberService_Saved;
}
private void MemberService_Saved(IMemberService sender, SaveEventArgs<IMember> e)
{
foreach (var member in e.SavedEntities)
{
if (member.RawPasswordValue == null)
continue;
var mail = new MailHelper.MailVariables
{
From = ConfigurationManager.AppSettings["from-email"],
ReplyTo = ConfigurationManager.AppSettings["reply-to"],
Bcc = ConfigurationManager.AppSettings["monitoremail"],
FromName = "Steve Waugh Foundation",
Content = BuildEmailBody(member.Name, member.Username, member.RawPasswordValue, ConfigurationManager.AppSettings["login-url"], member.Email),
Subject = "Your Login Details - Steve Waugh Foundation",
To = member.Email,
ToName = member.Name
};
if (MailHelper.SendMail(mail))
{
LogHelper.Info<MailHelper>(string.Format("New Member Notification sent to {0}", member.Name));
}
/*if (member.IsNewEntity())
{
//This is a brand new member object
//Trigger indexing
}
else
{
var dirtyMember = (ICanBeDirty) member;
var dirtyProperties = member.Properties.Where(x => x.IsDirty()).ToList();
if (dirtyMember.IsDirty() || dirtyProperties.Count() > 1)
{
//More then one property or the member object itself is dirty
//so we know that its not only LastLoginDate that is changed
}
}*/
}
}
private string BuildEmailBody(string name, string username, string password, string loginLink, string emailTo)
{
var ldReplacements = new ListDictionary
{
{ "<%Name%>", name },
{ "<%Username%>", username },
{ "<%Password%>", password },
{ "<%Link%>", loginLink }
};
var mailDefinition = new MailDefinition
{
BodyFileName = "/Email/Templates/memberlogin.html",
From = ConfigurationManager.AppSettings["from-email"]
};
var mailMessage = mailDefinition.CreateMailMessage(emailTo, ldReplacements, new Control());
mailMessage.IsBodyHtml = true;
return mailMessage.Body;
}
Using this MailHelper class:
public class MailHelper
{
public static bool SendMail(MailVariables mailVariables)
{
try
{
var mailMsg = new System.Net.Mail.MailMessage
{
From = new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.From), HttpUtility.HtmlEncode(mailVariables.FromName)),
Subject = mailVariables.Subject,
Body = mailVariables.Content,
IsBodyHtml = true
};
mailMsg.To.Add(new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.To), HttpUtility.HtmlEncode(mailVariables.ToName)));
mailMsg.Bcc.Add(new System.Net.Mail.MailAddress(HttpUtility.HtmlEncode(mailVariables.Bcc), "Monitor Email"));
if (mailVariables.ReplyTo != null)
mailMsg.ReplyToList.Add(new System.Net.Mail.MailAddress(mailVariables.ReplyTo));
var smtpClient = new System.Net.Mail.SmtpClient { EnableSsl = mailVariables.EnableSsl };
// If PickupDirectory is relative, change it to absolute
if (smtpClient.PickupDirectoryLocation != null && System.IO.Path.IsPathRooted(smtpClient.PickupDirectoryLocation) == false)
smtpClient.PickupDirectoryLocation = HttpContext.Current.Server.MapPath(smtpClient.PickupDirectoryLocation);
smtpClient.Send(mailMsg);
return true;
}
catch (Exception ex)
{
LogHelper.Error<MailHelper>("Error creating or sending contact mail, check if the is a mailFrom property has a value.", ex);
}
return false;
}
public class MailVariables
{
public string Content { get; set; }
public string Subject { get; set; }
public string To { get; set; }
public string Bcc { get; set; }
public string ToName { get; set; }
public string From { get; set; }
public string FromName { get; set; }
public string ReplyTo { get; set; }
public bool EnableSsl { get; set; }
}
}
Note that the only way for me to get the password (in the body of the email message) was to not encrypt the password. For that I changed the passwordFormat in the web.config from "Hashed" to "Clear":
<membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="UmbracoMembershipProvider" type="Umbraco.Web.Security.Providers.MembersMembershipProvider, Umbraco" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" useLegacyEncoding="true" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Member" passwordFormat="Clear" />
<add name="UsersMembershipProvider" type="Umbraco.Web.Security.Providers.UsersMembershipProvider, Umbraco" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" useLegacyEncoding="true" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" passwordFormat="Clear" />
</providers>
</membership>
Cheers,
Gus
is working on a reply...