У меня есть функция публикации для вставки информации о процессе в базу данных и отправки электронной почты одному получателю.
$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();
}
}
Но функция публикации сработала дважды. Что случилось? Нужно ли мне что-то настраивать на апаче? Кто-то может мне помочь?
$mail->Subject .= md5(microtime(true));
. Проверьте также свои журналы. - person Synchro   schedule 23.05.2016sendEmailClick
на стороне Android не срабатывает дважды? Один раз дляbuttonPressed
и один раз дляbuttonReleased
? Просто догадываюсь, потому что код для этого отсутствует. - person puelo   schedule 23.05.2016$app->post('/sendemail', ...)
в$app->get('/sendemail', ...)
и получите прямой доступ к этому маршруту через браузер. Он отправляет письмо дважды? Если это так, то вы, вероятно, на правильном пути. Если нет, я предполагаю, что это как-то связано с Android/Volley. - person Mikey   schedule 24.05.2016