symfony 无法通过小型SMTP节点服务器发送邮件,错误:SSL操作失败,代码为1,OpenSSL错误消息:

qaxu7uf2  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(155)

我在本地主机上运行了一个定制的Node SMTP-server来帮助发送邮件。但是当我尝试发送邮件时,我收到了以下错误:
在Symfony中:

{
    "message": "Warning: stream_socket_enable_crypto(): SSL operation failed with code 1.
                OpenSSL Error messages:\nerror:1416F086:SSL 
                routines:tls_process_server_certificate:certificate verify failed"
}

在我的节点SMTP服务器上:

my-custom-smtp-server  | 
{
  "level":30,
  "time":1668095669283,
  "pid":7,
  "hostname":"1f08bad45913",
  "msg":"Got connection from 172.22.0.1"
}

my-custom-smtp-server  | 
{
  "level":50,
  "time":1668095669294,
  "pid":7,
  "hostname":"1f08bad45913",
  "msg":"SMTP Error 140413503703424:error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert 
         unknown ca:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1545:SSL alert number 48\n"
}

my-custom-smtp-server  | 
{
  "level":50,
  "time":1668095669294,
  "pid":7,
  "hostname":"1f08bad45913",
  "msg":"SMTP Error 140413503703424:error:14094418:SSL routines:ssl3_read_bytes:tlsv1 
         alert unknown ca:../deps/openssl/openssl/ssl/record/rec_layer_s3.c:1545:SSL 
         alert number 48\n"}

我能以某种方式绕过此错误吗?
我试图避免在我的小型节点SMTP服务器上设置TLS和SSL。

config/packages/dev/mailer.yaml的内容:

dsn: 'smtp://mydemo:mysuperpassword@host.docker.internal:2525'

版本和规格

  • 麦克
  • Symfony 4.4版

尝试的解决方案1:将?verify_peer=false添加到DSN

我试着将DSN行变成这样(找到了here和这里):

dsn: 'smtp://mydemo:mysuperpassword@host.docker.internal:2525?verify_peer=false'

我也试探着:

dsn: 'smtp://mydemo:mysuperpassword@host.docker.internal:2525?verify_peer=0'

但我得到了同样的错误。

尝试的解决方案2:尝试使用网络设置

我可以在这里读到:[试图访问host.docker.internal导致连接被拒绝](https://github. com/docker/for-win/issues/2402#issuecomment-441059035),它可能是与主机文件的东西。然而,我无法在我的容器内的主机文件中找到任何:docker-compose exec php bash,然后是vim /etc/hosts
不过,那是一个关于“Windows换码头”的帖子。

尝试的解决方案3:尝试通过cURL发送邮件(从容器内部)

我尝试访问我的PHP容器(docker-compose exec php bash),然后使用以下命令发送邮件:

curl smtp://mydemo:mysuperpassword@host.docker.internal:2525 --mail-from myemail@example.org --mail-rcpt myemail@example.org --upload-file ~/email-example.txt

其中~/email-example.txt看起来像这样:

From: MyTry <myemail@example.org>
To: destinationaddress@example.org
Subject: Example email
Date: Mon, 7 Nov 2016 08:45:16

Dear Joe,
Welcome to this example email. What a lovely day.

成功了!但遗憾的是,它只是证明了两个容器可以互相访问。而且我的SMTP服务器也能正常工作。它并没有解决我试图通过我的SMTP服务器从Symfony应用程序发送邮件时遇到的错误。

vngu2lb8

vngu2lb81#

解决办法就是按照这里所说的去做:Overriding the EsmtpTransportFactory-class
对于那些没有Symfony经验的人(像我一样)。

这将在config/services.yaml中(在services-部分中):

services:

  ..
  ..
  ..

  mailer.transport_factory.smtp:
    class: App\Mailer\EsmtpTransportFactory
    tags:
      - { name: 'mailer.transport_factory', priority: "-100" }

并创建一个文件:src/Mailer/EsmtpTransportFactory.php,并将上述链接中的PHP类放入其中。

相关问题