사용자에게 짧은 퀴즈를 제공하는 웹 응용 프로그램을 개발 중입니다. 시스템은 QuizID 및 IsSent 열로 구성된 데이터베이스의 Quiz 테이블을 검사합니다.이메일을 보낸 후 'IsSent'열의 값을 업데이트하는 방법은 무엇입니까?
IsSent 열 (비트 데이터 형식)의 값이 0 (false)이면 시스템에서 모든 사용자에게 퀴즈를 보냅니다. 1이 있으면 퀴즈가 이미 전송되었음을 의미합니다.
나는 응용 프로그램이 전자 메일을 보내도록 할 수 있지만 지금은 전자 메일을 보낸 후 IsSent 값을 1 또는 true로 업데이트하려고하지만 어떻게해야할지 모르겠다.
아무에게도 어떻게 할 수 있습니까?
내 코드 :
당신은 당신의 QuizIDs을 추적 할 필요가protected void Page_Load(object sender, EventArgs e)
{
SendEmailTOAllUser();
}
protected void SendEmail(string toAddress, string fromAddress, string MailSubject, string MessageBody, bool isBodyHtml)
{
SmtpClient sc = new SmtpClient("SMTP (MAIL) ADDRESS");
try
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress("[email protected]", "OUR SYSTEM");
msg.To.Add(toAddress);
msg.Subject = MailSubject;
msg.Body = MessageBody;
msg.IsBodyHtml = isBodyHtml;
//Response.Write(msg);
sc.Send(msg);
}
catch (Exception ex)
{
throw ex;
}
}
protected void SendEmailTOAllUser()
{
string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=psspTest;Integrated Security=True";
string cmdText = "SELECT QuizID, IsSent FROM dbo.QUIZ";
string cmdText2 = "SELECT Username FROM dbo.employee";
Collection<string> emailAddresses = new Collection<string>();
string link = "";
string body = "";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
{
while (reader.Read())
{
if (!(bool)reader["IsSent"])
{
string quizid = reader["QuizID"].ToString();
link = "<a href='http://pmv/pssp/StartQuiz.aspx?testid=" + quizid + "'> Click here to participate </a>";
body = @"<b> Please try to participate in the new short safety quiz </b>"
+ link +
@"<br /> <br />
This email was generated using the <a href='http://pmv/pssp/Default.aspx'>PMOD Safety Services Portal </a>.
Please do not reply to this email.
";
}
}
}
reader.Close();
}
using (SqlCommand cmd = new SqlCommand(cmdText2, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
{
while (reader.Read())
{
string emailTo = reader["Username"].ToString();
string receiverEmail = emailTo + "@gmail.com";
emailAddresses.Add(receiverEmail);
}
}
reader.Close();
}
conn.Close();
}
foreach (string email in emailAddresses)
{
SendEmail(email, "", "Notification Email Subject", body, true);
}
}
감사 :
다음은 이러한 개념을 모두 포함하는 재 작성합니다. 나는 다음과 같은 오류가 있습니다 : 메일 헤더에 유효하지 않은 문자가 있습니다 : '@'그리고 그것을 고치는 방법을 모른다. 어떤 도움을 주시겠습니까? – user1093651
죄송합니다. 코드에 오류가있어서 답변을 업데이트했습니다. if (sbEmailAddresses.Length == 0)를 if (sbEmailAddresses.Length! = 0)로 변경해야합니다. 주소 목록에 추가하기 전에 이름이 데이터베이스에서 읽히도록 업데이트했습니다. –
도움 주셔서 대단히 감사합니다. 나는 그것을 알아낼 수 있었다. 나는 당신의 코드에서 조금 바뀌었다. 야, 고마워. 당신은 실제로 내 목숨을 구했지만 이제는 코드에 또 다른 문제가 있습니다. 문제는 다음과 같습니다. 사용자에게 보내지 않은 퀴즈 이상인 경우 시스템에서 퀴즈 테이블을 확인하기를 원합니다. 나는이 퀴즈들 중 첫 번째 퀴즈를 보내지 말고 모든 퀴즈 또는 마지막으로 생성 된 퀴즈 만 보내주기를 바란다. 그렇게하는 방법? – user1093651