Use PHP sendmail from Docker container to send through host Postfix

12,460

I'm not sure about using the host's config/postfix however I can suggest an alternative solution that may work just as well. Add a postfix container and copy the configs from the host to the container:

services:
  application:
    image: some-company/some-application
    environment:
      - APPLICATION_ENV
    ports:
      - 80:80

  smtp:
    image: namshi/smtp
    environment:
      - MAILNAME
      - SMARTHOST_USER
      - SMARTHOST_PASSWORD
    volumes:
      - /etc/postfix/main.cf:/etc/postfix/main.cf
    ports:
      - 25:25

Then you can use smtp as your mailer host / transport and the user/pass from the environment.

Share:
12,460
javal88
Author by

javal88

BY DAY: Tech enthusiast BY NIGHT: Drummer HOBBIES: Music, drumming, trekking, nerding #SOreadytohelp

Updated on July 13, 2022

Comments

  • javal88
    javal88 almost 2 years

    I want to send mail from my Alpine-PHP-Fpm container using my host postfix installation.

    RECAP

    PHP-Fpm Container -> Sendmail -> PostFix on host -> Sending via SMTP

    But I get

    sendmail: can't connect to remote host (127.0.0.1): Connection refused

    Here is the Postfix config:

    smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
    biff = no
    append_dot_mydomain = no
    readme_directory = no
    
    smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    
    smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
    myhostname = MYDOMAIN.com
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = localhost.com, localhost
    
    # SMTP authentication settings
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = static:[email protected]:SECRETPSW
    smtp_sasl_security_options = noanonymous
    smtp_tls_security_level = may
    #header_size_limit = 4096000
    relay_destination_concurrency_limit = 20
    
    # Limit DOS Attacks
    default_process_limit = 100
    smtpd_client_connection_count_limit = 10
    smtpd_client_connection_rate_limit = 30
    queue_minfree = 20971520
    header_size_limit = 51200
    message_size_limit = 10485760
    smtpd_recipient_limit = 100
    
    # Default relayhost setting
    relayhost = smtp.MYDOMAIN.com
    
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 172.18.0.3 # Fpm container IP
    mailbox_command = procmail -a "$EXTENSION"
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = 172.18.0.1 # Docker0 bridge IP
    inet_protocols = all
    

    And here is the php.ini mail section:

    [mail function]
    SMTP = localhost
    smtp_port = 25
    sendmail_path = "/usr/sbin/sendmail -t -i"
    mail.add_x_header = On
    

    Are there any ports that I need to open in my docker-compose file or in the host firewall settings?