2011-06-21 62 views
0

我想限制发送电子邮件到只有几个地址。我的想法是下载可以邮寄到的人的名字,然后在.php文件中,所选名称将匹配到电子邮件地址(以防止垃圾邮件)并发送。如果没有必要,下拉列表的值可能只是电子邮件地址。脚本现在设置的方式,您只能发送到您手动指定的1个地址。根据选项选择值发送电子邮件

我使用的是从这里jQuery和PHP:http://www.twostepmedia.co.uk/send-html-form-results-in-an-email-from-php-using-jquery-ajax/

PHP

<?php 
$email = $_POST['email']; 
$msg = $_POST['msg']; 
$agents = array(1 => "[email protected]", 2 => "[email protected]"); 
$agent = $agents[(int) $_POST['agents']]; 
// $agent will have your selected e-mail address 
$message = "From: " . $email . " Message: " . $msg; 
$message = wordwrap($message, 70); 
mail($agent, 'The Subject', $message); 
?> 

jQuery的

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
        $("#submit").click(function(){ 
      var data = $("#contact").serialize(); 
       $.ajax 
        ({ 
        type: "POST", 
        url: "mail.php", 
        data: data, 
        cache: false, 
        success: function() 
         { 
          alert("Thank you"); 
         } 
        }); 
       return false; 
     }); 
    }); 
</script> 

形式

<form id="contact"> 
<p>From</p><input type="text" name="email" /> 
<p>Message</p><textarea name="msg"></textarea> 
<br /> 
<select id="agents"> 
    <option value="1">Jill Smith</option> 
    <option value="2">Jack Smith</option> 
</select> 
<br /> 
<input type="submit" id="submit" value="Send" /> 
</form> 
+0

你在找教程吗? – hakre

+0

家伙,你的问题是什么?请简要说明你的问题和你的问题。 – FinalForm

+0

在php文件中,我想阅读下拉列表中传递的任何值,将其与地址列表(最好在php文件本身中)进行匹配,然后发送电子邮件至该地址。我坚持读取下拉值,将其与列表相匹配,并插入要邮寄的结果。 – Thomas

回答

4

如果你想保护地址免受垃圾邮件侵害,你最好不要在html中。您可以只使用名称或数字作为值,然后在php中查找以获取地​​址(从数据库或固定列表中获取)。

一个例子:

HTML:

<select name="agents" id="agents"> 
    <option value="1">Jill Smith</option> 
    <option value="2">Jack Smith</option> 
</select> 

PHP:

$agents = array(1 => "[email protected]", 2 => "[email protected]"); 
$agent = $agents[(int) $_POST['agents']]; 
// $agent will have your selected e-mail address 

通常你会用你的阵列,以及填补select让他们总是匹配和it's轻松添加新地址。

编辑:根据您的意见和编辑,看来你忘了你的名字选择agents,它有一个id但没有name所以你需要将其更改为:

<select name="agents" id="agents"> 
+0

到目前为止,这并不奏效。我把'mail($ agent,'Subject',$ message);'作为PHP文件的最后一行,并且在$ msg = $ _POST ['msg'];'之下查找代理。 – Thomas

+0

@Thomas你需要编辑你的文章,以显示实际的PHP和HTML,因为很难说没有看到它。 – jeroen

+0

@Thomas顺便问一下,'var_dump($ _ POST)'的结果是什么? – jeroen

0

这听起来像你知道是什么去做。而不是发送电子邮件地址,传递一个名称或某种不同的标识符以在服务器端进行匹配。您可以使用关联数组或switch语句将名称映射到电子邮件地址。是你在寻求什么帮助...?

+0

在php文件中,我想阅读下拉列表中传递的任何值,并将其与地址列表(最好在php文件本身中)进行匹配,然后发送电子邮件到该地址。我坚持读取下拉值,将其与列表相匹配,并插入要邮寄的结果。 – Thomas

+0

好的,所以现在你传递的是电子邮件地址。相反,只传一个名字。那么一个简单的switch语句或关联数组应该足以进行匹配。我不认为你需要保留所有的名字在另一个PHP文件中。如果你有一个很长的名字列表,将它们放入数据库并使用users表中的ID生成下拉列表以匹配记录并获得电子邮件地址可能会更容易。 http://php.net/manual/en/control-structures.switch.php – thescientist

0

你需要一个包含选择名称的电子邮件的数组,然后只需在select中为值添加id并将这些id用作数组中的索引。 或者您可以运行查询以通过ID选择电子邮件。这就是如果你有一个与这些人的ID /名称表。 在.php文件中,您可以创建一个新变量($ agents也许),并为其分配$ _POST ['agents']的值。如果你要使用db,也可以使用mysql_real_escape_string()。

+0

好的,所以这几乎是jeroen所说的。 –

0

在您的mail.php文件中,您必须从POST变量中检索“代理”,就像使用“msg”和“email”一样。

使用类似Firebug的东西来检查通过POST发送的内容。

0

使用本:http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/

的PHPMailer是一个类,可以让你发送邮件到超过上就像一个功能接收器:$phpmailer->receiver('receiver1'), $phpmailer->receiver('receiver2')等等,然后你的多单,如上面说的,把ID在你的下拉列表,然后在你的mail.php代码中,你将id与邮件地址相关联,并发送邮件给phpmailer,以非常简单的方式发送邮件

如果你已经知道它们,你就可以拥有这个邮件

$my_allowed_mails = array (
'id1' => '[email protected]', 
'id2' => '[email protected]', 
'id3' => '[email protected]' 
); 

    $receiver = $my_allowed_mails[$_POST['mail_choosed']]; 
+0

@Thomas:我的代码看起来像你在php代码中用id所问的 – darkylmnx

相关问题