首页 > 解决方案 > 从 Android 调用邮件 PHP 文件不起作用

问题描述

我的 Android 应用程序中有以下功能:

void sendEmail(String PHPfileUurl, String receiverEmail, String fromEmail) {
        ParseUser currentUser = ParseUser.getCurrentUser();

        StringBuilder messageBuilder = new StringBuilder();
        for (int i=0; i<productsOrdered.size(); i++){
            messageBuilder.append(productsOrdered.get(i)).append("\n");
        }
        String mess = messageBuilder.toString();

        String parameters = "name=" + currentUser.getString(Configurations.USER_FULLNAME) +
                "&fromEmail=" + fromEmail +
                "&receiverEmail=" + receiverEmail +
                "&messageBody=" + mess +
                "&storeName=" + Configurations.MERCHANT_NAME +
                "&shippingAddress=" + currentUser.getString(Configurations.USER_SHIPPING_ADDRESS);

        String strURL = PHPfileUurl + parameters;
        strURL = strURL.replace(" ", "%20");
        strURL = strURL.replace("\n", "%20");

        Log.i(Configurations.TAG, "PHP STRING URL: " + strURL);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        try {
            URL url;
            url = new URL(strURL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setConnectTimeout(20000);
            conn.setReadTimeout(20000);
            conn.setDoInput(true);
            conn.setDoOutput(true);

            if( conn.getResponseCode() == HttpURLConnection.HTTP_OK ){
                InputStream is = conn.getInputStream();
                Log.i(Configurations.TAG, "EMAIL RESPONSE: " + conn.getResponseMessage());
            } else {
                InputStream err = conn.getErrorStream();
                Log.i(Configurations.TAG, "ERROR ON EMAIL: " + err);
            }
        } catch (IOException e) {e.printStackTrace(); }
    }

当我调用该函数时,Logcat 会打印出以下消息:

I/log-: PHP STRING URL: http://example.com/myapp/email-admin.php?name=Mark%20Doe&fromEmail=myemail@gmail.com&receiverEmail=admin@mydomain.com&messageBody=PRODUCT%20ID:%20Q3nQgZdlFG%20---%20PRODUCT:%20Nike%20Sport%20Shoes%20black%20%20---%20QUANTITY:%201%20---%20SIZE:%20L%20&storeName=Z%20Store%20Inc.&shippingAddress=John%20Doe,%20121%20Church%20Avenue,%20ASD123,%20London,%20UK
I/log-: EMAIL RESPONSE: OK

所以我认为一切都很好,因为 RESPONSE = OK。但事实并非如此,因为我不会在 admin@mydomain.com 收到任何电子邮件(还有另一个电子邮件地址,我发布了一个假的作为示例,Logcat 将我的真实电子邮件地址打印为receiverEmail)。

这是我的mail.php文件:

// POST Variables
$name = $_POST['name'];
$fromEmail = $_POST['fromEmail'];
$receiverEmail = $_POST['receiverEmail'];
$messageBody = $_POST['messageBody'];
$storeName = $_POST['storeName'];
$shippingAddress = $_POST['shippingAddress'];
$headers = 'From: ' .$fromEmail;

// SUBJECT 
$subject = "New order from " .$name. " on '" .$storeName. "'";


// COMPOSE MESSAGE 
$message = 
"ORDER DETAILS:\n".
$messageBody.
"\n\nName: " .$name. 
"\nUser Email: " .$fromEmail.
"\nShipping Address: " .$shippingAddress
;

/* Finally send email */
mail($receiverEmail,
    $subject, 
    $message, 
    $headers
);

/* Result */
echo "Email Sent to: " .$receiverEmail. "\n Message: " .$message;

我的代码有问题吗?还有另一种方法可以从我自己的服务器调用mail.php文件吗?我也试过这个问题,但我无法DefaultHttpClient在我的项目中导入该类。

标签: javaphpandroidpost

解决方案


使用 $_GET 而不是 $_POST ,

将所有变量从

$name = $_POST['name'];

$name = $_GET['name'];

推荐阅读