1

グループに電子メールでメッセージを送信できる小さな Web アプリがあります。スパムのため、承認手続きをしなければなりません。

メッセージは PHP 経由で送信されます。グループに転送するメールに送信する前に、メッセージを受け入れる必要がありますか?

私のPHP:

<?php 
$errors = '';
$myemail = 'whatever@gmail.com';//<-----Put Your email address here.
if(empty($_POST['name'])  || 
   empty($_POST['email']) || 
   empty($_POST['message']))
{
    $errors .= "\n FEJL: Alle felter skal udfyldes";
}

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$message = $_POST['message']; 
$email_subject = "Form request";
$times = $_POST["timeslots"];

if (!preg_match(
"/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", 
$email_address))
{
    $errors .= "\n FEJL: Ugyldig email adresse";
}
$strTimes = implode($times);
if( empty($errors))
{
$to = $myemail; 
$email_subject = "$message \n ";
$email_body = "\n Code: $strTimes \n Navn: $name \n Email: $email_address \n"; 

$headers = "From: $email_address\n"; 
$headers .= "Reply-To: $email_address";

mail($to,$email_subject,$email_body,$headers);
//redirect to the 'thank you' page
header('Location: thx.html');
} 
?>
4

1 に答える 1

0

データキューを使用する場合は、これ自体が適切なサイズのプロジェクトです。

データベースを使用したい場合は、データベースの設定の基本、テーブルの使用方法と設定方法などを知っておく必要があります(とにかくデータベースにアクセスできる場合)。

接続コードは次のとおりです。

peterabc123を、データベースに関連付けられているユーザー名とパスワードに変更します。

$con = mysql_connect("localhost","peter","abc123");
if (!$con){
  die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db");

データベースに行を挿入し、データベースから行を選択し、その情報に基づいて動作し、データベースから行を削除するためのサンプルコードをいくつか紹介します。

さて、メール送信から始めましょう:

コードの下部にあるこのセクションは、操作する必要のあるデータです

$to = $myemail; 
$email_subject = "$message \n ";
$email_body = "\n Code: $strTimes \n Navn: $name \n Email: $email_address \n"; 
$headers = "From: $email_address\n"; 
$headers .= "Reply-To: $email_address";

したがって、データベースにテーブルが設定されたmysqlデータベース接続があるとすると、これを挿入する方法になります(これは基本的な挿入クエリであることに注意してください)。

$query = "INSERT INTO queuemails (to, subject, body, headers) VALUES ('" . $to . "', '" . $email_subject . "', '" . $email_body . "', '" . $headers . "')";
mysql_query($query);

さて、これらの2行は設定された変数のに追加されます。

次に、承認ページの方法を提供する必要があります。

これは同じページで実行できますがmail()、スクリプトの残りの部分から関数を分離する必要があります。

さて、これが承認のためにキューを表示できるようにするための選択スクリプトです。キューに入れられたメールを保存したテーブルに自動インクリメント列を追加したことに注意してください。これは、データのその行に一意の番号を生成するので、テーブル内の行をより簡単に選択できるようにするためです。この列はmid(「メールID」の略)と呼ばれます。

さて、ここに選択スクリプトがあります:

$query = "SELECT * FROM queuemail"; //this is only good if you know you wont get millions else you need to limit it
//limited select:
//$query = "SELECT * FROM queuemail LIMIT 0,10"; //selects the first 10
while($m = mysql_fetch_assoc(mysql_query($query))){
  echo $m['to'] . " ";
  echo $m['subject'] . " ";
  echo '<a href=approve.php?mid=' . $m['mid'] . '>Approve</a><br>';
}

その後、最後にクリーンアップするために、関数を使用したmail()、送信したデータベースからその行を削除する必要があります。

これがコードです($_GET変数を含みます。これは安全ではない方法ですが、使用するコードを表示するには十分です)。

mail(); //data can be added either from a new select statement or from POSTING it with the form
$query = "DELETE FROM mailqueue WHERE mid='" . $_GET['mid'] . "'";
mysql_query($query);
echo 'Your mail has been sent and deleted from the queue';

お役に立てれば。

データベースの別の列にタイムスタンプを自動的に追加して、次のようなスパム投稿を確認できます。

if($_SERVER['REQUEST_TIME'] > ($oldtimeofpost + 100)){ //time is in seconds
  //do something
}
else{
  //warning
}
于 2012-09-16T10:54:03.500 に答える