c# - 实施电子邮件通知并让用户知道有人在他/她的帖子上回答
问题描述
好的,所以我正在尝试使用FluentEmail
我有HelpDesk
系统,一旦User
创建帖子,管理员可以看到这个帖子和答案。一旦管理员回答发布用户应该收到电子邮件通知。目前我实现了双方,但问题是电子邮件发送到错误的电子邮件地址。
[HttpPost]
public async Task<IActionResult> SendDiscussionAsync(int ticketId, string message)
{
var userName = User.FindFirstValue(ClaimTypes.Email);
var account = _db.ApplicationUsers.SingleOrDefault(a => a.UserName.Equals(userName));
var userEmail = account == null ? string.Empty : account.Email;
//var userName = User.FindFirstValue(ClaimTypes.Name);
//var account = _db.ApplicationUsers.FirstOrDefault(u => u.UserName == userName);
//var userEmail = account == null ? string.Empty : account.Email;
var discussion = new Discussion
{
DateAndTime = DateTime.Now,
Content = message,
TicketId = ticketId,
UserId = account.Id,
ApplicationUser = account
};
var sender = new SmtpSender(() => new SmtpClient("localhost")
{
Credentials = new NetworkCredential("emailaddress", "password"),
EnableSsl = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Port = 26,
UseDefaultCredentials = false,
Host = "smtp.gmail.com"
});
Email.DefaultSender = sender;
Email.DefaultRenderer = new RazorRenderer();
var email = await Email
.From("emailaddress")
.To(userEmail)
.Subject("Test Email for Notification")
.Body(body: discussion.Content)
.SendAsync();
_unitOfwork.Discussion.Add(discussion);
_unitOfwork.Save();
return RedirectToAction("Details", new { id = ticketId });
}
一旦用户使用用户名和密码登录,我尝试在 EmailService 中将电子邮件地址传递给用户如何创建帖子。现在的逻辑是相反的,一旦管理员回复邮件后,电子邮件会自动发送到管理员电子邮件地址,但它应该发送给User
我在这里获取用户登录信息
var userName = User.FindFirstValue(ClaimTypes.Email);
var account = _db.ApplicationUsers.SingleOrDefault(a => a.UserName.Equals(userName));
var userEmail = account == null ? string.Empty : account.Email;
但我不知道如何获取 UserEmail 并传递给EmailService
. 这是我Create
的帖子功能。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Upsert(TicketVM ticketVM)
{
var userName = User.FindFirstValue(ClaimTypes.Email);
var user = HttpContext.User.Identity.Name;
if (ticketVM.Ticket.UserId > 0)
{
var usert = _db.ApplicationUsers.FirstOrDefault(u => u.Id == ticketVM.Ticket.UserId);
ticketVM.Ticket.ApplicationUser = usert;
}
else
{
var usert = _db.ApplicationUsers.FirstOrDefault(u => u.Email == userName);
ticketVM.Ticket.ApplicationUser = usert;
}
if (ModelState.IsValid)
{
if (ticketVM.Ticket.Id == 0)
{
ticketVM.Ticket.Status = TicketStatus.Otvoren.ToString();
_unitOfwork.Ticket.Add(ticketVM.Ticket);
}
else
{
//ticketVM.Ticket.Status = ((TicketStatus)Convert.ToInt32(ticketVM.Ticket.Status)).ToString();
_unitOfwork.Ticket.Update(ticketVM.Ticket);
if (ticketVM.Ticket.Status.ToString() == "1")
{
ticketVM.Ticket.Status = "Otvoren";
}
else if (ticketVM.Ticket.Status.ToString() == "2")
{
ticketVM.Ticket.Status = "NaCekanju";
}
else if (ticketVM.Ticket.Status.ToString() == "3")
{
ticketVM.Ticket.Status = "Zatvoren";
}
}
_unitOfwork.Save();
return RedirectToAction(nameof(Index));
}
else
{
ticketVM.TicketTypeList = _unitOfwork.TicketType.GetAll().Select(i => new SelectListItem
{
Text = i.Name,
Value = i.Id.ToString()
});
if (ticketVM.Ticket.Id != 0)
{
ticketVM.Ticket = _unitOfwork.Ticket.Get(ticketVM.Ticket.Id);
}
}
return View(ticketVM);
}
也许这也能帮助你更好地理解,我在这里得到了 UserInformation,这个函数包含UserEmail
[HttpGet]
public IActionResult GetByName(string name)
{
var obj = _unitOfwork.ApplicationUser.GetAll(x => x.Name == name);
return Json(new { data = obj });
}
这是我的票证模型,(UserId)
其中包含ForeightKey
给 ApplicationUser的用户信息
public class Ticket
{
[Key]
public int Id { get; set; }
[Display(Name = "Opis")]
public string Description { get; set; }
[Display(Name = "Kratak Opis")]
[MaxLength(20, ErrorMessage = "Maximalan broj karaktera je 20")]
public string ShortDescription { get; set; }
[Display(Name = "Datum i vrijeme slanja")]
public string DateAndTime { get; set; } = DateTime.Now.ToString("dd/MM/yyyy HH:mm");
//[Display(Name = "Datum i vrijeme zavrsetka")]
//public DateTime Answered { get; set; }
[Display(Name = "Vrsta tiketa")]
public int TicketTypeID { get; set; }
[ForeignKey("TicketTypeID")]
public virtual TicketType TicketType { get; set; }
public int UserId { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser ApplicationUser { get; set; }
public int? ClientId { get; set; }
[ForeignKey("ClientId")]
public virtual Client Client { get; set; }
public string Status { get; set; } = TicketStatus.Otvoren.ToString();
}
还有 ApplicationUser 类
public class ApplicationUser : IdentityUser<int>
{
[Required]
[Display(Name = "Ime")]
public string Name { get; set; }
[Required]
[Display(Name = "Adresa")]
public string StreetAddress { get; set; }
[Required]
[Display(Name = "Grad")]
public string City { get; set; }
[Required]
[Display(Name = "Postanski broj")]
public string PostalCode { get; set; }
public int? ClientId { get; set; }
[ForeignKey("ClientId")]
public Client Client { get; set; }
[NotMapped]
public string Role { get; set; }
//[NotMapped]
//public int RoleId { get; set; }
[NotMapped]
public IEnumerable<SelectListItem> RoleList { get; set; }
[NotMapped]
public IEnumerable<SelectListItem> ClientList { get; set; }
}
解决方案
推荐阅读
- android - 如何获取具有相同字符串键的所有项目 android firebase
- java - 用junit测试很多相关实体
- spring - Spring boot 2 配置没有 EmbeddedMongo 的响应式 mongo db 存储库
- python - 如何使用 ESRI ASCII Raster 格式文件(如 Matlab 中的 mapshow)在 Python 中绘制栅格地图?
- javascript - 安装 prerender-spa-plugin 后 Vue js babel 构建错误
- c# - 如何添加 if else 语句以检查数据是否已输入 SQL Server 数据库并显示消息
- abap - 如何使用 BAPI_OUTB_DELIVERY_CHANGE 参数 EXTENSION2 更新 Z 字段?
- mysql - MySQL工作台数据导入,外键错误
- node.js - 如何读取 NPM 依赖项中的非 JavaScript 文件?
- python - 将文本文件注释转换为 xml 文件