(GmailとPHPMailerクラスを使用して)PHPページに投稿するコンソールアプリケーションがあります。GmailのPHPMailerクラスで、毎回2つのメールを送信します。
問題は、ユーザーは常にメールを2回受信することです。ここで
は(私はログ記録の目的のためにUIDを渡す。)public static void PostUpdate(string uid)
{
WebRequest request = WebRequest.Create("http://127.0.0.1/bin/server/check_table.php");
request.Method = "POST";
string postData = "check_table";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
Console.WriteLine("[" + uid + "]- " + DateTime.Now.ToString() + " : HttpWebResponse(" + ((HttpWebResponse)response).StatusDescription + ")");
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
// Display the content for debugging
// Console.WriteLine("[" + uid + "]- " + DateTime.Now.ToString() + " : " + responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
}
私のPHPファイルには、私はいくつかのデバッグオプションを考慮している
$sql = "SELECT * FROM users as u JOIN value_store as v ON u.id = v.uid WHERE u.last_notification < DATE_SUB(NOW() , INTERVAL 5 MINUTE) ";
$results = mysql_query($sql, $db_link);
while($row = mysql_fetch_array($results)) {
$id = $row[0];
$msg = "";
if($row["inlet_moisture"] > $row["inlet_moisture_high_critical"]) {
$msg = "Critical Inlet Moisture";
} else if($row["inlet_moisture"] > $row["inlet_moisture_high_warning"]) {
$msg = "Inlet Moisture Warning";
}
if($msg != "") {
if($row["mobile_notification"] == 1) {
if(sendMessage(($row["mobile_number"] . "@" . $row["mobile_carrier"]), $row["first_name"], $msg)) {
$res1 = mysql_query("UPDATE users SET last_notification = NOW() WHERE id = $id",$db_link);
echo "SMS Sent for [$id]";
}
}
if($row["email_notification"] == 1) {
if(sendMessage($row["email"], $row["first_name"], $msg)) {
$res2 = mysql_query("UPDATE users SET last_notification = NOW() WHERE id = $id",$db_link);
echo "Email Sent for [$id]";
}
}
}
echo "Update For [$id] Complete!";
}
で構成されてC#のからの私の投稿です投稿されました。
WebRequestからの出力を読み取るように私のコンソールアプリケーションを設定しました... 私はページをポストしていますが、POSTはOKです。私は、データベースに2つの行があるため、クロージャの問題があると思うし、各行のIDをエコーバックすると、最後の行(2回)だけが得られます。私は私が使用しているid(行)の出力をループに出力しながらPHPを更新しようとしました。
は、私はまだ
Update For [2] Complete!
Update For [2] Complete!
代わりの
Update For [1] Complete!
Update For [2] Complete!
改正については、上記参照してください受けます。
:)おそらく動作します。 1つは実際のメールアドレス用、もう1回はSMS用です。あなたのユーザーについてはわかりませんが、私の電話は私の仕事用のメールやSMSを受け取るので、私は二重の通知を受ける傾向があります –
はい、これは送信の方法が非常に異なります。メールを使ってSMSに送るには[phoneNumber] @ [mobile carrier]にメールを送り、メールではそれをユーザーのメールアドレスにします。これらの呼び出しがあいまいでないことを確認できます。 1つは電子メールを送信し、1つはSMSを送信します。あなたが思っているのは、私はちょうどナッツで、同じものとして見ています。 1つはSMSです。メールはOutlook経由で読んだGmailアカウントに関連付けられています。 – rlemon
サーバのアクセスログを確認する - PHPスクリプトが2回呼び出されていますか?もしそうなら、それはあなたのC#コードのものです。 –