2016-05-23 8 views
2

私はデータベースに関するプロセスに関する情報を挿入して1人の受信者に電子メールを送信する投稿機能を持っています。PHPMailerはslimframeworkで2回電子メールを送信します

$app->post('/sendemail', function ($request, $response) { 
    //Save info process 
    $message = saveDataBaseInfo(); 

    if ($message == "OK") {   

     // Send email 
     $res = sendEmail("Some text", "<p>Some text</p>", "Some subject", "[email protected]"); 

     if ($res == "Fail") { 
      return $res; 
     } 
    }  
}); 

public function sendEmail($body, $bodyHtml, $subject, $emailTo) { 

    $mail = new PHPMailer; 

    $mail->SingleTo = true; 
    $mail->isSMTP(); 
    $mail->Host = 'myHost'; 
    $mail->SMTPAuth = true; 
    $mail->Username = 'theuser'; 
    $mail->Password = '******'; 
    $mail->SMTPSecure = 'tls'; 
    $mail->Port = 587; 
    $mail->setFrom("[email protected]", "", false); 
    $mail->addAddress($emailTo); 
    $mail->isHTML(true); 

    $mail->Subject = $subject; 
    $mail->Body = $bodyHtml; 
    $mail->AltBody = $body; 
    $send = $mail->send(); 

    if (!$send) { 
     return "Success" 
    } else { 
     return "Fail"; 
    } 
} 

そして私は

// Click event function 
private void sendEmailClick() { 

    HashMap<String, String> parms = new HashMap<>(); 
    // parms like emailTo for example 

    TaskServerAsync taskServerAsync = new TaskServerAsync(this, parms); 
    taskServerAsync.execute(R.string.urlSendEmail); 
} 

public class TaskServerAsync extends AsyncTask<Integer, String, JSONObject> implements Response.ErrorListener { 
    private Map<String, String> parm; 
    private Context context; 

    public TaskServerAsync(Context context ,Map<String, String> parms) { 
     this.parm = parm; 
     this.context = context; 
    } 

    @Override 
    protected void onPreExecute() { 
     //Show progressBar 
     progressBar.show(); 
    } 

    @Override 
    protected JSONObject doInBackground(Integer... values) { 
     RequestFuture<JSONObject> future = RequestFuture.newFuture(); 

     // Class send request server with volley 
     ServerConn.send(context, values[0], parms, future, this); 

     JSONObject json = null; 
     try { 
      // Get future response 
      json = future.get(10, TimeUnit.SECONDS); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } catch (TimeoutException e) { 
      e.printStackTrace(); 
     } 

     return json; 

    } 

    @Override 
    protected void onProgressUpdate(String... values) { 

    } 

    @Override 
    protected void onPostExecute(JSONObject response) {   
     dismissProgressBar(); 
    } 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     // Show error server and dismiss ProgressBar 
     dismissProgressBar(); 
    } 

    private void dismissProgressBar() { 
     if (progressBar != null) 
      progressBar.dismiss(); 
    } 
} 

以下のコードのように私のAndroidアプリ上でこの関数を呼び出すしかし、ポスト機能は二回発射。どうしましたか?私はApacheで何かを設定する必要がありますか?誰かが私を助けることができますか?

+0

この関数をどのように呼びますか?たとえば、AJAXを使用して投稿していますか? – Mikey

+0

私はアンドロイドアプリを持っており、私はVolley Apiでこの機能を呼び出しています – Vimaciel

+0

これはあなたの問題をより複雑にします。投稿に使用するJavaコードで質問を更新する必要があります。 Javaコードに問題がある可能性があります。あなたのAndroidアプリを使用しないで、このルートに投稿しようとすると、それも2回送信されますか? – Mikey

答えて

0

notedとして、問題はAndroidアプリがAPIを2回呼び出すことです。

関連する問題