2017-04-10 29 views
1

我試圖通過way2sms API和郵件通過 PHPMailer的API來發送短信,但問題是我收到3短信和3郵件 我運行的PHP。PHP發送短信和電子郵件的3倍(使用Android作爲前端和發送請求到服務器中使用抽射)

<?php 

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    $status = $_POST['status']; 
    $uname = $_POST['uname']; 
    $dept = $_POST['dept']; 
    $ename = $_POST['ename']; 

    require_once('dbConnect.php'); 

    $sql  = "SELECT name,email FROM user WHERE mobile='" . $uname . "'"; 
    $check = mysqli_fetch_row(mysqli_query($con, $sql)); 
    $username = $check[0]; 
    $email = $check[1]; 

    require_once 'smsapi/way2sms-api.php'; 
    sendWay2SMS('username', 'password', $uname,' Message'); 

    require_once 'mailapi/PHPMailerAutoload.php'; 
    $mail = new PHPMailer; 

    $mail->isSMTP(); // Set mailer to use SMTP 
    $mail->Host  = 'smtp.gmail.com'; // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true; // Enable SMTP authentication 
    $mail->Username = '[email protected]'; // SMTP username 
    $mail->Password = 'password'; // SMTP password 
    $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted 
    $mail->Port  = 587; // TCP port to connect to 
    $mail->setFrom('[email protected]', 'Name'); 
    $mail->addAddress($email, $username); 
    $mail->isHTML(true); 
    $mail->Subject = 'Subject'; 
    $mail->Body = 'Message'; 
    !$mail->send(); 
} 
?> 

其餘全部數據庫和其他代碼工作正常。當我只嘗試 利用發送短信下面的代碼就只發送一條消息

<?php 
    require_once 'smsapi/way2sms-api.php'; 
      sendWay2SMS('username', 'password', $uname,' Message'); 
?> 

或當我只嘗試 用來發送電子郵件下面的代碼就只發送一封電子郵件

<?php 
     require_once 'mailapi/PHPMailerAutoload.php'; 
     $mail = new PHPMailer; 

     $mail->isSMTP(); // Set mailer to use SMTP 
     $mail->Host  = 'smtp.gmail.com'; // Specify main and backup SMTP servers 
     $mail->SMTPAuth = true; // Enable SMTP authentication 
     $mail->Username = '[email protected]'; // SMTP username 
     $mail->Password = 'password'; // SMTP password 
     $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted 
     $mail->Port  = 587; // TCP port to connect to 
     $mail->setFrom('[email protected]', 'Name'); 
     $mail->addAddress($email, $username); 
     $mail->isHTML(true); 
     $mail->Subject = 'Subject'; 
     $mail->Body = 'Message'; 
     !$mail->send(); 
    ?> 

Android code

public void sendMessage(View view){ 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL1, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String s) { 

        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError volleyError) { 
         try { 
          Toast.makeText(EventDetailActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show(); 
         }catch (Exception e){ 

         } 
        } 
       }){ 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 

       String Status = ebtn.getText().toString().trim().toLowerCase(); 
       SharedPreferences sharedPreferences = getSharedPreferences(SharedPrefConfig.SHARED_PREF_NAME,Context.MODE_PRIVATE); 
       String uname = sharedPreferences.getString(SharedPrefConfig.USERNAME_SHARED_PREF, null); 
       Map<String,String> params = new Hashtable<String, String>(); 
       params.put("status", Status); 
       params.put("uname", uname); 
       params.put("dept", dept); 
       params.put("ename", name); 
       return params; 
      } 
     }; 
     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 
+2

這很奇怪,但我敢打賭你的腳本正在運行三次,可能是通過瀏覽器插件。您可以檢查 - 在郵件末尾添加一個隨機數字 - 如果每封郵件的內容不同,您就會知道腳本正在分三次運行。如果他們是相同的,你會知道你的單個消息正在發送三次。 – Synchro

+0

註釋發送短信部分,並輸入您的電子郵件作爲接收方檢查您是否收到3封電子郵件。如果你做得很好,那麼你的代碼運行3次。那麼它很可能是一個循環,有的人多次重複這個任務。一步一步向後看,看看它發生了什麼。 –

+0

是循環3次。當我評論發送代碼,然後我也收到3封電子郵件與相同的消息。我在前端使用android,並使用volley庫向服務器發送請求(希望這可能有用)。 –

回答

0

排球使用處理請求一個RetryPolicy其通過默認 發送具有指數退避算法最多3次的請求。 所以這是實際的問題。

所以我在凌空類添加一行

stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

所以,這解決了這個問題。

相關問題