2011-06-21 83 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

相關問題