You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Web2Py中通过Python将文本域内容发送至指定邮箱

Web2Py实现邮件发送功能的完整方案

看起来你已经搭好了前端的邮件发送UI,接下来咱们一步步把后端的发送逻辑补上,让这个功能跑起来:

1. 先修正你的视图代码

你当前的视图里有个小语法问题,{{=}} 是空的,咱们改成可以显示发送状态的变量,同时给表单加个更清晰的结构,提升用户体验:

{{extend 'layout.html'}}

<h1>Send Email</h1>

<!-- 显示发送状态提示 -->
{{if success_message:}}
    <div style="color: green;">{{=success_message}}</div>
{{elif error_message:}}
    <div style="color: red;">{{=error_message}}</div>
{{pass}}

<form method='post'>
    <p>
        <label for="name">你的姓名:</label>
        <input type='text' name='name' id="name" required/>
    </p>
    <p>
        <label for="email">你的邮箱:</label>
        <input type='email' name='email' id="email" required/>
    </p>
    <p>
        <label for="subject">邮件主题:</label>
        <input type='text' name='subject' id="subject" required/>
    </p>
    <p>
        <label for="message">邮件内容:</label>
        <textarea rows="6" name="message" cols="50" id="message" required></textarea>
    </p>
    <input type='submit' value='Send' />
</form>

2. 实现控制器的邮件发送逻辑

假设你的视图对应的是 default.py 控制器里的 send_email 动作(如果是其他动作比如index,直接替换就行),在控制器里添加以下代码:

def send_email():
    success_message = None
    error_message = None
    
    # 处理表单POST请求
    if request.method == 'POST':
        # 获取表单提交的数据
        name = request.vars.name
        sender_email = request.vars.email
        subject = request.vars.subject
        message_content = request.vars.message
        
        # 组装邮件内容,把用户输入的所有信息整合到邮件正文里
        email_body = f"发件人姓名: {name}\n发件人邮箱: {sender_email}\n\n邮件内容:\n{message_content}"
        
        try:
            # 初始化Web2Py的邮件对象
            mail = auth.settings.mailer
            mail.settings.sender = "你的发送邮箱@xxx.com"  # 替换成你的发送邮箱账号
            mail.settings.login = "你的发送邮箱@xxx.com:你的邮箱授权码"  # 替换成邮箱账号和授权码(注意:不是登录密码,比如Gmail用应用专用密码)
            
            # 发送邮件到指定目标邮箱
            mail.send(
                to=["目标邮箱@xxx.com"],  # 替换成你要接收邮件的目标邮箱
                subject=subject,
                message=email_body
            )
            
            success_message = "邮件发送成功!"
        except Exception as e:
            error_message = f"邮件发送失败: {str(e)}"
    
    # 把状态变量传递给视图,用来显示提示信息
    return dict(success_message=success_message, error_message=error_message)

3. 配置Web2Py的SMTP邮件设置

要让邮件能正常发送,还需要在 settings.py 里配置SMTP参数,这里以常用的Gmail为例(其他邮箱比如QQ、163的SMTP参数可以查对应官网文档):

# 在settings.py里添加或修改以下配置
mail = auth.settings.mailer
mail.settings.server = 'smtp.gmail.com:587'  # SMTP服务器地址和端口
mail.settings.tls = True  # 启用TLS加密
mail.settings.ssl = False  # Gmail用TLS模式,不需要SSL

注意:如果用Gmail,需要先开启「应用专用密码」(更安全)或者临时开启「不太安全的应用访问」;QQ邮箱的SMTP服务器是smtp.qq.com:465,需要启用SSL,并且用邮箱授权码作为登录密码。

4. 测试功能

现在你可以访问对应的URL(比如 http://localhost:8000/default/send_email),填写表单提交,就能把textarea里的内容发送到你指定的邮箱啦!


内容的提问来源于stack exchange,提问作者najme b

火山引擎 最新活动