Jag har gjort en inloggning med CreateUserWizard, jag vill kunna skicka ett email där användaren är tvungen att aktivera sitt nya konto. Jag har tänkt så här. jag använder eventet SendingEmail eftersom kontot är skapat och informationen inlagd i databasen när det reses. Problemet är att det händer absolut ingenting! Min kod ser ut så här. OBS! Har ändrat mailadressen, men det är rätt Det felet betyder att du troligen att objektet customer inte är fyllt, så du får kolla om det är null först. Användaren är inte inloggad, det är meningen att det ska vara så. Meningen är att användaren ska få ett mail efter att han/hon har registrerat sig, i mailet kommer det att finnas en länk som de måste gå in på och då kommer de att aktivera sitt konto. jag har satt LoginCreateduser = "false" och DisableCreatedUser="true", när de sedan går in på länken de får i mailet sätts IsApproved = true i databasen. Det är just till denna länk jag behöver användarnamnet och UserID. Tjoho jag har lyckats få det att fungera:) jag har löst det så här.Inloggning med email
<code>
protected void CreateUserWizard1_SendingEmail(object sender, EventArgs e)
{
string myName = User.Identity.Name.ToString();
string myUserName;
customers Customers = new customers();
customersDB CustomersDB = new customersDB();
try
{
Customers = CustomersDB.getUserByUserName(myName);
}
catch (Exception err)
{
Label1.Text = err.Message.ToString();
}
MailMessage myMail = new MailMessage();
myMail.From = "ADRESS";
myMail.To = "ADRESS";
myMail.Cc = Customers.Email.ToString();
myMail.Subject = "Inloggningsuppgifter";
myMail.Body = "Välkommen som medlem, här är dina uppgifter <br />ID: " +
Customers.UserID.ToString() + "<br />Mail: " + Customers.Email.ToString();
SmtpMail.SmtpServer = "mail1.telia.com";
try
{
SmtpMail.Send(myMail);
}
catch (Exception ex)
{
lblError.Text = ex.Message.ToString();
}
}
</code>
Jag får inget felmeddelande eller nåt, men användaren blir adderad till databasen. jag har även angett OnSendingMail="CreateUserWizard1_SendingEmail" i kontrollen.
------------------------------EDIT----------------------------
Såg ett fel jag har gjort, jag kan ju inte använda User.Identity.Name eftersom användaren inte är inloggad. Jag borde ju då ha fått nåt fel eftersom jag inte kan få ut nåt värde från databasen. ja gahr nu försökt med TextBox txtUserName = (TextBox)CreateUserWizard1.FindControl("UserName"); istället. Det funkar dock inte med det heller, nu får jag felet <b>Object reference not set to an instance of an object.</b> på denna rad: myMail.Cc = Customers.Email.ToString(); detta tyder ju på att jag inte får ut nåt värde från databasen. Min DB-klass ser ut så här:
<code>
public customers getUserByUserName(string _userName)
{
SqlConnection conn = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("getUserByUserName", conn);
cmd.CommandType = CommandType.StoredProcedure;
// SQL parameters...
cmd.Parameters.Add(new SqlParameter("@userName", SqlDbType.VarChar, 256));
cmd.Parameters["@userName"].Value = _userName;
try
{
conn.Open();
SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.SingleRow);
rd.Read();
customers myCustomer = new customers((string)rd["userID"], (string)rd["Email"]);
rd.Close();
return myCustomer;
}
catch (Exception err)
{
throw new Exception(err.Message);
}
finally
{
conn.Close();
}
}
</code>
Kör jag SP i så fungerar det:( har testat det ännu mer, Även om jag hårdkodar in ett värde som jag är säker på finns i databasen så får jag samma fel! Fattar inte detta:( Min SP ser ut så här
<code>
alter proc getUserByUserName
@userName varchar(256)
as
-- Checks to se so the user exists...
if(exists(select userID from aspnet_Users where userName = @userName))
begin
select u.userID, m.Email from aspnet_users as u
inner join aspnet_Membership as m
on u.UserID = m.UserID
where u.userName = @userName
--return
end
else
begin
raiserror('Användarnamnet finns inte i vårt register, var god och registrera dig igen.', 16, 1)
return
end
</code>Sv: Inloggning med email
Eftersom du har en join mot Membership - om det inte finns någon sådan post borde du inte få reda på om användaren är inloggad. Är inte det ett fel också?Sv:Inloggning med email
Problemet är att jag inte vet hur jag ska fånga upp användarnamnet från textboxen. Jag har använt eventet SendingMail eftersom då är ju användaren skapad och inlagd i databasen. Men nåt verkar ju gå riktigt fel.Sv: Inloggning med email
<code>
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
myName = CreateUserWizard1.UserName.ToString();
customers Customers = new customers();
customersDB CustomersDB = new customersDB();
try
{
Customers = CustomersDB.getUserByUserName(myName);
}
catch (Exception err)
{
lblError.Text = err.Message.ToString();
}
MailMessage myMail = new MailMessage();
myMail.From = "ADRESS";
myMail.To = "ADRESS";
myMail.Cc = Customers.Email.ToString();
myMail.Subject = "Inloggningsuppgifter";
myMail.BodyFormat = MailFormat.Html;
myMail.Body = "Välkommen som medlem, här är dina uppgifter <br />ID: " + Customers.UserID.ToString() + "<br />Mail: " + Customers.Email.ToString();
SmtpMail.SmtpServer = "mail1.telia.com";
try
{
SmtpMail.Send(myMail);
}
catch (Exception ex)
{
lblError.Text = ex.Message.ToString();
}
}
</code>
Jag ändrade event till OnCreatedUser sen kunde jag ju plocka ut användarnamnet med CreateUserWizard1.UserName.ToString();. resten var ju inte så svårt.