如何在Alpine Docker容器中使用sendmail?

1aaf6o9v  于 2023-05-28  发布在  Docker
关注(0)|答案(6)|浏览(264)

我只是想发送简单的电子邮件进行测试,但是当在容器中执行sendmail时,我得到了sendmail: can't connect to remote host (127.0.0.1): Connection refused。在Alpine容器内使用sendmail时需要考虑什么?

63lcw9qa

63lcw9qa1#

在一个容器中,没有运行的MTA(邮件传输代理),只是没有运行的邮件服务器。例如,您可以使用ssmtp(https://pkgs.alpinelinux.org/package/edge/main/x86/ssmtp)并将其配置为使用外部,例如您的提供商,smtp-server(例如,smtp服务器)。mail.yourprovider.com)上提供。
比您可以使用ssmtp发送电子邮件。这是一个类似的情况,从php Docker镜像内部发送邮件是不可能的。在这里您可以进一步阅读-> https://github.com/docker-library/php/issues/135

0s7z1bwu

0s7z1bwu2#

如果您使用BusyBox sendmail,则可以在php.ini文件中设置配置。
BusyBox sendmail中继到SMTP服务器。您可以在命令行中使用-S选项指定服务器。
我在php.ini中的配置是:

sendmail_path = /usr/sbin/sendmail -S 172.16.239.1 -t -i

我在另一个容器中使用SMTP服务器。
https://technote.fyi/code/sysadmin/docker/configuring-alpine-linux-on-docker-to-send-mail-for-wordpress/

aurhwmvo

aurhwmvo3#

将SMTPHOST环境变量设置为smtp服务器的主机名或IP。使用此变量的代码自2008-09-27以来就存在于busybox sendmail commit(https://git.busybox.net/busybox/commit/?id=bed22a01fb19de6e4b4c2c7d8c5953bc7aa2580e)中,但使用页面仅在2016-07-14更新了commit https://git.busybox.net/busybox/commit/?id=9de7509aa013a8634b13a29008cd58ca971c9c7c。请注意,在线文档页面没有反映这些更改https:www.busybox.net/downloads/BusyBox.html。使用sendmail --help查看正确的用法。

4jb9z9bj

4jb9z9bj4#

添加到m4r10k的早期答案。
1.在容器的docker文件中安装ssmtp。

RUN apk update
RUN apk add ssmtp

1.在主机上创建配置文件

root=postmaster
mailhub=mail.privateemail.com:587
FromLineOverride=YES
rewriteDomain=<YouDomain.com>
AuthUser=<YouEMail@YourDomain.com
AuthPass=<YouUserPass>
UseSTARTTLS=YES
hostname=YourDomain.com

在运行容器时使用卷以使用ssmtp.conf
从NameCheap查看使用docker-compose和SMTP的full example here

bsxbgnwa

bsxbgnwa5#

这是我使用mailhog作为smtp的设置:

docker-compose

version: "3"

services:
  drupal:
    build: .
    container_name: ${PROJECT_NAME}-drupal
    depends_on:
      - mysql
    restart: unless-stopped
    networks:
      - internal
    volumes:
      - ./docroot:/var/www/html
      - ./config:/home/config
  mailhog:
    image: mailhog/mailhog:latest
    container_name: ${PROJECT_NAME}-mailhog
    ports:
      - "1025:1025"
      - "8025:8025"
    restart: unless-stopped
    networks:
      - internal

不要忘记在php和mailhog容器之间共享同一个网络。
在Dockerfile中安装mhsendmail,并将其二进制模式改为0755,使其可执行,最后在PHP中添加mhsendmail配置:

Dockerfile php:7.4-fpm-alpine3.14

RUN curl -LkSso /usr/bin/mhsendmail 'https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64'&& \
    chmod 0755 /usr/bin/mhsendmail && \
    echo 'sendmail_path = "/usr/bin/mhsendmail --from=nobody@7bd822a2c191 --smtp-addr=mailhog:1025"' >> /usr/local/etc/php/php.ini;

现在从php容器内部发送一封电子邮件来测试配置:

$ php -r "mail('recipient@mail.com', 'test subject', 'test body');"

来源:https://github.com/mailhog/MailHog/issues/254

k3bvogb1

k3bvogb16#

这是对用户kitanotori的请求:请将标题更改为 * 如何从Alpine Linux容器内发送邮件 *,而不是使用单词 sendmail(并请删除此标签),因为这很可能会误导正在寻找如何在Alpine Linux容器中运行开源MTA Sendmail的人,恕我直言,这绝对是有意义的-与用户m4r10k的观点相反。
注:我请求原谅,如果这不是正确的方式提到这一点,但与我目前的网站声誉作为一个不到一个星期作为一个活跃的成员,我没有看到任何其他方式来解决这个问题。

相关问题