You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:20:42