Please whitelist cPanel in your adblocker so that you’re able to see our version release promotions, thanks!

The Community Forums

Interact with an entire community of cPanel & WHM users!

How to send email from different domains using different smarthosts

Discussion in 'Workarounds and Optimization' started by DigitalComunic, Nov 18, 2018.

  1. DigitalComunic

    DigitalComunic Member

    Joined:
    Jan 17, 2009
    Messages:
    15
    Likes Received:
    0
    Trophy Points:
    51
    Hi all.

    This is related to this topic and anothers old topics: Two different smarthosts for two different domains in exim

    This is an old need for me.

    I did sometime ago, (with a lot of trial and error, of course). I got my cpanel server working with different domains sending by different smarthosts smtp services. Only configuring in WHM exim configuration manager, this way, changes will not be overwrited at cpanel updates.

    I'm using for a long time with success, and this is how I did.



    1 - Exim advanced editor configuration

    In WHM, go to the "Exim Configuration Manager" (Home > Service Configuration > Exim Configuration Manager). After, click in the "Advanced Editor" tab.

    celsopecuraro_exim_smarthosts1.jpg


    Next, scroll to the "Section: AUTH" editable field. To locate the field, you can use the browser search with the term "Section: AUTH" (without quotes off course).

    celsopecuraro_exim_smarthosts2.jpg


    Copy the code below into the "Section: AUTH" field. Notice that lines that start with # are comments only. You can change the comments, but the rest of the code should not be changed.

    Code:
    #Section: AUTH
    #Smart Host Sending
    sendbysmarthosts:
    driver = plaintext
    public_name = LOGIN
    hide client_send = : ${extract{user}{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}: ${extract{pass}{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}
    

    The field filled will be like this, notice the green verified sign to the right confirming the code is valid for Exim.

    celsopecuraro_exim_smarthosts2b.jpg



    Now, scroll to the "Section: PREROUTERS" editable field...
    celsopecuraro_exim_smarthosts3.jpg

    ...and paste the following code:

    Code:
    #Section: PREROUTERS
    #Smart Host Sending
    sendbysmarthostsrouter:
    driver = manualroute
    domains = ! +local_domains
    condition =  "${if eq{${lookup{$sender_address_domain}partial-lsearch{/etc/exim_smarthosts}{$value}}}{}{false}{true}}"
    ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
    headers_add = "${perl{mailtrapheaders}}"
    transport = sendbysmarthoststransport
    route_list = * ${extract{smtp}{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}
    
    Note the line "ignore_target_hosts", you should check if your server needs some specific IP to be ignored there. On my server it was not necessary. Also note that in the line "condition = " and line "headers_add = ", the double quotes are required. And also in line "condition = ", there we are using "partial-lsearch" instead of "lsearch" only.


    The last Exim configuration will be in the "Section: TRANSPORTSTART" editable field. Paste the following code in this field:

    Code:
    #Section: TRANSPORTSTART
    #Smart Host Sending
    sendbysmarthoststransport:
    driver = smtp
    port = ${extract{port}{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}
    hosts_require_auth = $host_address
    hosts_require_tls = $host_address
    

    Now, scroll to the bottom of the page and Save the Exim configuration.

    celsopecuraro_exim_smarthosts4.jpg


    After saving, make sure Exim has restarted correctly, like bellow.

    celsopecuraro_exim_smarthosts5.jpg


    Be careful if in any editable field that I mentioned has any code there. In this case, before you add or replace the codes, you'll need to analyze whether the codes will conflict or not. In my case, there was no code in any of the 3 editable fields.



    Step 2: Creating a file with smarthosts parameters.

    To complete all, you should create a file in the "/etc" directory of your server, called "exim_smarthosts". Within this file will be the settings of the Smarthosts and the domains that will use them. The file must be created by the root user and the permissions must be 0644.

    Within this file, you must save the login, smtp, and port parameters of smarthosts, so that they are used at the time of sending the email. Each line starts with an index, which is the name of the domain followed by a colon. After the colon, each parameter has an own indicator that follows this model:

    Code:
    "domain", is the same domain name used in index of the line.
    "user", is the user (or ID) used in smarthost's SMTP.
    "pass", is the password (or API secret, or API key, etc.) used for the SMTP user in smarthost.
    "smtp", the SMTP server address of smarthost.
    "port", the port used in Smarthost (586,25 or another).
    

    Here's an example of how the "/etc/exim_smarthosts" file will look using 3 different smarthosts for 6 different domains. The data is obviously fictitious, you should adapt the parameters according to your smarthosts settings that you will use. In this scenario, if we have domain7.com and domain8.com in the server, these two domains will use the server SMTP service, because both are out of "/etc/exim_smarthosts" file.


    Code:
    # sending by Sendgrid
    domain1.com: domain=domain1.com user=SENDGRID_smtp_user pass=SENDGRID_api_password smtp=smtp.sendgrid.net port=587
    domain2.com: domain=domain2.com user=SENDGRID_smtp_user pass=SENDGRID_api_password smtp=smtp.sendgrid.net port=587
    
    # sending by Mailjet
    domain3.com: domain=domain3.com user=MAILJET_smtp_user pass=MAILJET_api_password smtp=in-v3.mailjet.com port=587
    domain4.com: domain=domain4.com user=MAILJET_smtp_user pass=MAILJET_api_password smtp=in-v3.mailjet.com port=587
    
    # sending by Sendpulse
    domain5.com: domain=domain5.com user=SENDPULSE_smtp_user pass=SENDPULSE_api_password smtp=smtp-pulse.com port=587
    domain6.com: domain=domain6.com user=SENDPULSE_smtp_user pass=SENDPULSE_api_password smtp=smtp-pulse.com port=587
    
    Remember, each change in "exim_smarthosts" file requires a Exim restart, do it before your tests.

    Well, is this. I'll be satisfied and happy if this configuration helps some hosting admins. There are other possible syntaxes for all the exim settings I mentioned, which may also work. The ones I put in this article are the ones I'm currently using with better performance and reliability in my Cpanel hosting server.

    This article is at my linkedin too.
    If you note anything wrong or incorrect with this article, please warn me and I will have a pleasure to correct.

    Best regards.
     
    #1 DigitalComunic, Nov 18, 2018
    Last edited: Nov 18, 2018
  2. cPanelMichael

    cPanelMichael Technical Support Community Manager Staff Member

    Joined:
    Apr 11, 2011
    Messages:
    47,313
    Likes Received:
    2,157
    Trophy Points:
    363
    cPanel Access Level:
    Root Administrator
    Twitter:
    Hello @DigitalComunic,

    I've moved this over to our Workarounds forum. Thanks for sharing!
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  3. DigitalComunic

    DigitalComunic Member

    Joined:
    Jan 17, 2009
    Messages:
    15
    Likes Received:
    0
    Trophy Points:
    51
  4. Supamic

    Supamic Registered

    Joined:
    Feb 23, 2018
    Messages:
    2
    Likes Received:
    2
    Trophy Points:
    1
    Location:
    Victoria, BC
    cPanel Access Level:
    Root Administrator
    Thank you so much for this!! I have been stuck for years on this problem and thank goodness I kept checking back with the community! I'll do my part by spreading the word on stackoverflow and other forums. Cheers!
     
    cPanelMichael likes this.
Loading...

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice