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
相关产品推荐
相关产品推荐

