在Razor网页中通过SMTP实现点击员工姓名发送邮件的问题
解决Razor表单选择员工发送邮件的问题
嘿,咱们来调整下你的Razor代码,让它能正常给选中的员工发送邮件。我在你当前的代码里发现了几个关键问题,还有一些实现表单完整功能的缺失部分,一起来修正吧:
1. 修正下拉框的核心错误
你现在的下拉框把选项值设成了员工姓名,但我们需要的是邮箱地址才能发送邮件;另外还有个拼写错误@item.FUllName(第二个U不该大写),先把这部分改好:
<div class="form-group"> @{ var data = "SELECT FullName, Email From Employee ORDER BY Email"; var DB = Database.Open("VisitorConnectionString").Query(data); } <label>Whom to See</label> <!-- 把下拉框包裹在表单里,指定提交方式 --> <form method="post" action=""> <select name="selectedEmail" class="form-control"> <option value="">---Select Staff---</option> @foreach (var item in DB) { <!-- 选项值存邮箱,显示员工姓名,修正拼写错误 --> <option value="@item.Email">@item.FullName</option> } </select> <!-- 补充访客信息的表单字段 --> <div class="mt-3"> <label>Your Name</label> <input type="text" name="full_name" class="form-control" required /> </div> <div class="mt-3"> <label>Mobile Number</label> <input type="tel" name="phone_number" class="form-control" required /> </div> <div class="mt-3"> <label>Address</label> <textarea name="address" class="form-control" required></textarea> </div> <!-- 添加提交按钮 --> <button type="submit" class="btn btn-primary mt-3">Send Alert</button> </form> </div>
2. 完善邮件发送的后端逻辑
接下来在页面顶部添加表单提交后的处理逻辑,同时修正WebMail的配置细节:
@{ if (IsPost) { // 获取表单提交的所有数据 var selectedEmail = Request["selectedEmail"]; var full_name = Request["full_name"]; var phone_number = Request["phone_number"]; var address = Request["address"]; // 先验证是否选择了员工 if (!string.IsNullOrEmpty(selectedEmail)) { // 初始化WebMail - 请替换成你的Office365账号信息 WebMail.SmtpServer = "smtp.office365.com"; WebMail.SmtpPort = 587; // 推荐用587端口,25端口容易被防火墙拦截 WebMail.UserName = "你的Office365邮箱@domain.com"; WebMail.Password = "你的邮箱密码或应用密码(开启MFA时用)"; WebMail.From = "发件人邮箱@domain.com"; WebMail.EnableSsl = true; try { // 发送邮件,务必设置isBodyHtml为true,否则HTML标签会显示成纯文本 WebMail.Send( to: selectedEmail, subject: "Visitor Alert", body: $"From: <br/> Name: {full_name}<br/> Mobile Number: {phone_number}<br/> Address: {address}", isBodyHtml: true ); // 发送成功提示 <div class="alert alert-success">邮件已成功发送!</div> } catch (Exception ex) { // 捕获错误并显示 <div class="alert alert-danger">发送失败:@ex.Message</div> } } else { <div class="alert alert-warning">请选择要联系的员工!</div> } } }
几个关键注意点
- Office365端口:别用25端口,推荐用587,大部分服务器会拦截25端口的出站请求;
- 账号权限:如果你的Office365账号开了多因素认证(MFA),必须用应用密码代替普通密码;
- HTML邮件:一定要加
isBodyHtml: true,不然邮件里的<br/>不会生效,只会显示成字符串; - 表单验证:给必填字段加了
required属性,后端也做了非空判断,避免空数据提交。
这样修改后,用户选择员工、填完信息点击提交,就能把邮件发送到选中员工的邮箱里了。
内容的提问来源于stack exchange,提问作者Tochinicky Onyeamah
相关产品推荐
相关产品推荐

