You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel部署GoDaddy后无法连接MailTrap SMTP服务器报错求助

Laravel部署到GoDaddy Linux主机后无法连接MailTrap SMTP发送邮件

问题现象

本地用php artisan serve运行时,通过MailTrap发送订单邮件功能正常,但部署到GoDaddy Linux经济型主机(带cPanel)后,出现连接错误:

Connection could not be established with host "live.smtp.mailtrap.io:587": stream_socket_client(): Unable to connect to live.smtp.mailtrap.io:587 (Connection refused)

已尝试MailTrap提供的587、2525、25端口,且在config/mail.php中添加了SSL相关配置,但问题仍未解决。

相关配置代码

.env配置

MAIL_MAILER=smtp
MAIL_HOST=live.smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=xxx
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="no-reply@website-name.com"
MAIL_FROM_NAME="${APP_NAME}"

config/mail.php配置

<?php

return [
    'default' => env('MAIL_MAILER', 'smtp'),

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'url' => env('MAIL_URL'),
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'local_domain' => env('MAIL_EHLO_DOMAIN'),
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'mailgun' => [
            'transport' => 'mailgun',
            // 'client' => [
            //     'timeout' => 5,
            // ],
        ],

        'postmark' => [
            'transport' => 'postmark',
            // 'client' => [
            //     'timeout' => 5,
            // ],
        ],

        'sendmail' => [
            'transport' => 'sendmail',
            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
        ],

        'log' => [
            'transport' => 'log',
            'channel' => env('MAIL_LOG_CHANNEL'),
        ],

        'array' => [
            'transport' => 'array',
        ],

        'failover' => [
            'transport' => 'failover',
            'mailers' => [
                'smtp',
                'log',
            ],
        ],
        
    ],

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

    'markdown' => [
        'theme' => 'default',
        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

    'stream' => [
        'ssl' => [
            'allow_self_signed' => true,
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ],
];

路由配置

Route::post('/SendOrder', [Controller::class, 'EmailOrder'])->name('sendorder');
Route::post('/SendEmail', [Controller::class, 'EmailContact'])->name('sendcontact');

控制器代码

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Redirect;
use Spatie\Newsletter\Facades\Newsletter;
use Illuminate\Support\Facades\Mail;
use App\Mail\SendContact;
use App\Mail\SendOrder;

// ... 省略其他代码

/**
 * Summary of EmailContact
 * @param \Illuminate\Http\Request $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function EmailContact(Request $request)
{
    $contactName = $request->input('name');
    $contactEmail = $request->input('email');
    $contactNumber = $request->input('contact');
    $contactContent = $request->input('message');
    Mail::to('marketing@jpmarx.com')->send(new SendContact($contactName, $contactEmail, $contactNumber, $contactContent));
    return Redirect::route('ContactSuccess');
}

public function EmailOrder(Request $request)
{
    $fullName = $request->input('orderName');
    $cusEmail = $request->input('orderEmail');
    $cusAddress = $request->input('orderAddress');
    $cusContact = $request->input('orderContact');
    $fbLink = $request->input('fblink');
    $craylingQuan = $request->input('craylingsQuantity');
    $juvenileQuan = $request->input('juvenilesQuantity');
    $breederType = $request->input('breederRadio');
    $breederQuan = $request->input('breeders');
    Mail::to('marketing@jpmarx.com')->send(new SendOrder($fullName, $cusEmail, $cusAddress,
    $cusContact, $fbLink, $craylingQuan, $juvenileQuan, $breederType, $breederQuan));
    return Redirect::route('ContactSuccess');
}

解决方案

1. 检查GoDaddy主机的SMTP端口限制

GoDaddy经济型Linux主机通常会限制外部SMTP连接,尤其是25、587这类端口:

  • 登录cPanel,查看邮件模块下的「邮件传递设置」,确认是否允许外部SMTP中继;
  • 联系GoDaddy支持,询问是否解封了live.smtp.mailtrap.io的相关端口,或是否有主机防火墙拦截。

2. 改用GoDaddy自带SMTP服务

优先使用主机自带的SMTP配置,规避端口限制:
修改.env配置:

MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=25
MAIL_USERNAME=你的cPanel邮箱地址(比如no-reply@website-name.com)
MAIL_PASSWORD=对应邮箱密码
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="no-reply@website-name.com"
MAIL_FROM_NAME="${APP_NAME}"

同时确保config/mail.php中smtp配置的encryption对应env('MAIL_ENCRYPTION', null)。

3. 验证配置生效

部署后执行以下命令清除配置缓存:

php artisan config:clear
php artisan cache:clear

确认.env文件已正确上传到主机根目录,权限设置为644。

4. 测试端口连通性

通过SSH在主机上执行命令测试端口是否可访问:

telnet live.smtp.mailtrap.io 587

如果连接失败,说明主机确实无法访问该端口,只能换用GoDaddy自带SMTP或联系客服解封。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:50:24