2016-05-23 3 views
2

У меня есть функция post, чтобы вставлять информацию о процессе в базу данных и отправлять электронную почту одному получателю.PHPMailer отправляет дважды электронные письма по slimframework

$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"; 
    } 
} 

И я называю эту функцию на моем Android приложения, как код ниже

// 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(); 
    } 
} 

Но функция пост дважды выстрелил. Что не так? Нужно настроить что-то на apache? Кто-то может мне помочь?

+0

Как вы называете эту функцию? Например, используете ли вы AJAX для публикации? – Mikey

+0

У меня есть приложение для Android, и я вызываю эту функцию с помощью Volley Api. – Vimaciel

+0

Это делает вашу проблему более сложной. Вы должны обновить свой вопрос с помощью кода Java, который вы используете для публикации. Это может быть проблемой с вашим Java-кодом. Без использования вашего приложения для Android, если вы попытаетесь отправить сообщение на этот маршрут, он также отправит дважды? – Mikey

ответ

0

Как noted, проблема в том, что приложение Android отправляет вызов API дважды.

Смежные вопросы