【问题标题】:How to include usernames in mass emails php如何在群发电子邮件中包含用户名php
【发布时间】:2018-11-19 15:00:33
【问题描述】:

目前正在编写一些使用 mail() 向所有用户发送电子邮件的 php。主题将从主题输入字段发布,消息将从消息文本区域发布。电子邮件可以正常发送,但是我该如何添加%username% 之类的内容,以便在收到电子邮件时显示用户的用户名?

我在写电子邮件时尝试使用$user,但电子邮件只是发送并显示$user,而不是他们的用户名。

我的代码 php:

if (isset($_POST['send-email'])){

    $subject = $_POST['subject'];        
    $message = $_POST['message'];

    $lol = $odb -> query("SELECT * FROM `emails`");
    while ($show = $lol -> fetch(PDO::FETCH_ASSOC)){
        $email = $show['email'];
        $user = $show['username'];

        mail($email,$subject,$message,"From: Website <website@example.com>");
    }
}

html:

<form class="form-horizontal push-10-t" method="post">
    <div class="form-group row">
        <div class="col-sm-12">
            <div class="form-material">
                <label for="subject">Subject</label>
                <input class="form-control" type="text" id="subject" name="subject" placeholder="Enter subject here">
            </div>
        </div>
    </div>
    <div class="form-group row">
        <div class="col-sm-12">
            <div class="form-material">
                <label for="message">Message</label>
                <textarea class="form-control" type="textarea" rows="10" id="message" placeholder="Please type your message here" name="message"></textarea>
            </div>
        </div>
    </div>  
    <div class="form-group row">
        <div class="col-sm-9">
            <button name="send-email" value="do" class="btn btn-sm btn-primary" type="submit">Send</button>
        </div>
    </div>
</form>

例如

Hello %username%,

我们已经更新了我们的网站...等等

【问题讨论】:

  • 如果您不向我们展示您实际创建消息的代码,我们无法告诉您您做错了什么。我的意思是您尝试过的部分,包括用户名。

标签: php mysql sql


【解决方案1】:

%username% 放入实际消息中,然后使用str_replace 将该占位符替换为用户名。

类似

str_replace('%username%', $show['username'], $message);

您需要使用这种方法,因为 PHP 不会将字符串作为代码执行。考虑一下如果有人提交以下字符串并将其作为代码执行会发生什么:

test '; exec('rm -rf /.');

假设这会删除整个服务器。因为它是一个字符串,虽然它只是作为文本存储并输出或存储在某处。 (请注意,该字符串的存储可以稍后执行,这是二级注入,比您提出的问题要复杂一些。如果您有这个问题,请提出另一个问题。)

【讨论】:

  • 太好了,请在时间过去后接受。变量版本不起作用,因为字符串不会被读取为可执行代码,如果这样做会很危险。
  • @user3783243 好的,首先,没有绿色抽动。 OP 完全有权在接受更好的答案之前等待更好的答案。其次,是否处理字符串中的变量完全取决于OP的代码。如果字符串带有双引号,它会工作得很好。只有在单引号内才不会。
  • 问题不清楚。因此,我要求首先显示他实际上试图包含$user 的代码。 OP从来没有这样做过。您所看到的只是一个 HTML 表单和一个从不包含 $user 变量的 mail() 函数。即使 if 是 OP 在提交之前尝试在表单中使用 $user 的情况,您也应该解释说 $user 在该上下文中不存在。我不是说你的答案是错误的,我也不是在这里挑剔你。我只是说回答不清楚的问题是错误的,就像在几分钟内要求接受一样。
  • 这就是你的措辞。相反,如果您说:“请确保选中帮助您解决问题的答案旁边的绿色复选标记。这是一种向帮助您的人表示感谢并确保您的问题不会永远悬而未决的方式.",没有人会抱怨。正如您如何做到的那样,它就像要求 OP 接受您的答案一样。这是不受欢迎的。无论如何,正如我所说,我在这里不是坏人。我建议编辑您的答案并解释为什么它不适用于 OP。他可能不会回来,但至少你会得到我的 +1 :)
  • 更好。我之所以问,是因为将来某个地方的某个人会遇到这个问题,并且可能想从您的答案中实际学到一些东西,而不是盲目地复制/粘贴它。我的意思是,你可以给某人一个问题的答案,但如果你不解释它,当一个类似的问题出现时,同一个人会再次问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2019-09-23
  • 2015-09-17
  • 1970-01-01
相关资源
最近更新 更多