You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

修改php.ini后触发Internal Server Error及跨域邮件发送故障求助

Troubleshooting PHP Email Issues: 500 Error & Cross-Domain Sending Failures

Alright, let's work through this step by step—first we'll fix that frustrating 500 Internal Server Error, then we'll tackle the cross-domain email sending problem.

Part 1: Fixing the 500 Internal Server Error

The error popped up after modifying php.ini, and even reverting the change didn't resolve it. Here's what to check:

  • Verify your PHP configuration is actually reverted
    Sometimes cPanel's MultiPHP INI Editor overrides global php.ini settings. Create a simple phpinfo.php file in your web root with this code:

    <?php phpinfo(); ?>
    

    Access it via your browser, search for sendmail_path, and confirm it shows the correct default path (usually /usr/sbin/sendmail -t -i). If it still shows the incorrect /mail path, go back to MultiPHP INI Editor and ensure you've cleared any custom sendmail_path entry there.

  • Check file permissions for php.ini
    If your php.ini file has incorrect permissions, the server can't read it, leading to a 500 error. The correct permissions are typically 644, with ownership set to root or your server's web user (like apache or nobody). You can adjust this via cPanel's File Manager or SSH.

  • Locate and review server error logs
    Even if you thought you couldn't find them, cPanel has built-in log access:

    • Go to Metrics > Errors to see recent PHP/Apache errors
    • Check Metrics > Raw Access Logs for detailed server requests
    • Use Email > Track Delivery (for mail-related logs specifically)
      The logs will tell you exactly what's causing the 500 error—whether it's a missing sendmail binary, invalid configuration syntax, or permission issues.
  • Restart PHP/Apache services
    After modifying php.ini, the server might need a restart to apply changes. In cPanel, go to Advanced > Restart Services, then restart Apache Web Server and PHP-FPM (if your host uses it). If you don't have access, contact your hosting provider to do this for you.

Part 2: Resolving Cross-Domain Email Sending Failures

Once the 500 error is fixed, let's address why emails send to domain addresses but fail to external providers like Gmail:

  • Confirm sendmail configuration is correct
    Ensure sendmail_path in your PHP config is set to the valid system path:

    sendmail_path = "/usr/sbin/sendmail -t -i"
    

    This is the standard path on most Linux servers; if this doesn't exist, check with your host for the correct path to their sendmail binary.

  • Check if emails are being marked as spam
    First, check the spam/junk folder in your external email (like Gmail). Many hosting servers' default mail setups aren't authenticated, so external providers flag them as spam.

  • Set up email authentication records (SPF, DKIM, DMARC)
    This is the most critical step for getting external providers to accept your emails:

    • SPF: In cPanel, go to Email > Authentication and enable SPF. The record should include your server's IP address (e.g., v=spf1 a mx ip4:123.45.67.89 ~all).
    • DKIM: Also in Email > Authentication, enable DKIM. cPanel will generate a DNS record for you—add this to your domain's DNS settings.
    • DMARC: Create a DMARC TXT record in your DNS (e.g., v=DMARC1; p=none; sp=none; rua=mailto:dmarc@domain.com). This helps providers handle unauthenticated emails and gives you feedback on delivery issues.
  • Test with a minimal PHP mail script
    Use this simple script to eliminate any issues with your existing code:

    <?php
    $to = "your-personal@gmail.com";
    $subject = "Cross-Domain Test Email";
    $message = "This is a test to confirm external email delivery from info@domain.com";
    $headers = "From: info@domain.com\r\n" .
               "Reply-To: info@domain.com\r\n" .
               "X-Mailer: PHP/" . phpversion();
    
    if (mail($to, $subject, $message, $headers)) {
        echo "Email sent successfully!";
    } else {
        echo "Email delivery failed.";
    }
    ?>
    

    Run this script and check both your inbox and spam folder.

  • Review mail delivery logs
    Use cPanel's Email > Track Delivery tool to see exactly what happened to your test email. It will show if the email was accepted, rejected, or deferred by the external provider, along with error messages that can point to issues like missing authentication or blacklisted IPs.

内容的提问来源于stack exchange,提问作者Andres

火山引擎 最新活动