๐ŸชตVelocity.log is vital to your success

Velocity.log knows all and sees all.

The most important component in the entire Velocity MTA ecosystem is velocity-install/logs/velocity.log.

  • Want to know if your configuration change went through? Check velocity.log.

  • Want to know why your message didn't get delivered? Check velocity.log

  • Want to know how an unsubscribe happened you swear you didn't do? Check velocity.log

  • Want to know why opens or clicks aren't showing up? Check velocity.log

  • Want a real-time look into the email delivery "black hole"? Check velocity.log

  • Want to open a ticket? Please check velocity.log

All outgoing email, incoming email, opens, clicks, and unsubscribes for mail sent through Velocity MTA are stored for eternity in the same file, to see the most recent 100 log entries do:

tail -100 /root/velocity-install/logs/velocity.log 

Upon startup, you should see output similar to the following

License is activated!

When changes to policies, server settings, or ip warmups have been pushed from the platform installation backend MTA UI you can verify they were received if you see output similar to the following

:API::: POST /settings
:API:::Finished writing settings

When sending a test message through the email marketing broadcast test widget, you should see output similar to the following for troubleshooting purposes

:API::: POST /send-addr
:TRACE:::looking up MX for gmail.com
:TRACE:::gmail.com has 5 MX servers
:TRACE:::looking up A for gmail-smtp-in.l.google.com.
:TRACE:::IPs for gmail-smtp-in.l.google.com.: []string{"", "2404:6800:4003:c00::1a"}

test:TRACE:secretseedemail@gmail.com: to gmail.com -> gmail-smtp-in.l.google.com. (

test:SEND:secretseedemail@gmail.com: delivered in 6.374919129s

Test messages receive special handling

Messages using the test widget in broadcasts don't appear in the ip delivery reports or mail queue management, they receive the highest priority and bypass all other outstanding mail. This also applies to funnels.

When sending bulk production mail you should see output similar to the following

POST /send-lists

YRi9Ah7sfE5ALgRH9UbY3s:TRACE:::Reading http://emailplatformdomain.com/transfer/lists/YRi9Ah7sfE5ALgRH9UbY3s-TyRbwf359f4MXW6mDxEnKv/0-eggplantmail.com-KBRBk9yKdsdJdFpmLG4LVt-MXyBAcQLuAs34F6r8Q9B6z-16-00000000.blk

YRi9Ah7sfE5ALgRH9UbY3s:TRACE:::Reading http://emailplatformdomain.com/transfer/lists/YRi9Ah7sfE5ALgRH9UbY3s-TyRbwf359f4MXW6mDxEnKv/0-parmesanmail.com-KBRBk9yKdsdJdFpmLG4LVt-MXyBAcQLuAs34F6r8Q9B6z-16-00000000.blk

Reading /conf/send-YRi9Ah7sfE5ALgRH9UbY3s-MXyBAcQLuAs34F6r8Q9B6z-eggplantmail.com-0/list-00000000.blk

YRi9Ah7sfE5ALgRH9UbY3s:TRACE:::Uploaded send log file /logs/send-YRi9Ah7sfE5ALgRH9UbY3s.log-1681444242-sending


There are four types of potential delivery outcomes recorded in the velocity.log file

SEND means successful message delivery

SEND:disposabletemporary+hello@gmail.com: delivered in 2.140289308s

DEFER means a sending pause has been triggered and shows you the complete error code and deferral message returned by the mailbox provider

DEFER:misunderestimated@yahoo.com: 4.7.0 [TSS04] Messages from temporarily deferred 

SOFT shows you the complete error code and temporary bounce message returned by the mailbox provider

SOFT:misunderestimated12345@gmail.com: 4.2.2 The email account that you tried to reach is over quota. Please direct
4.2.2 the recipient to
4.2.2  https://support.google.com/mail/?p=OverQuotaTemp h3-20020a05600c350300b003f31a440e2fsi1991773wmq.13 - gsmtp (Rcpt) in 1.480220065s

HARD shows you the complete error code and permanent bounce reason returned by the mailbox provider

HARD:bademailonpurpose123000@gmail.com: 5.1.1 The email account that you tried to reach does not exist. Please try
5.1.1 double-checking the recipient's email address for typos or
5.1.1 unnecessary spaces. Learn more at
5.1.1  https://support.google.com/mail/?p=NoSuchUser f7-20020a7bcd07000000b003f0ae6369e2si4683916wmj.234 - gsmtp (Rcpt) in 1.431423553s

Web activity for opens, clicks, and unsubscribes will be logged as HTTP GET requests, you should see output similar to the following

GET /l?t=adviser&r=4KQbmSaDsWWWm8gvs-11DRR&c=nHet3QX8kNc8BdjtbTmo5x&u=45CCjYmMhYqNhpCX0tfF&l=J8VrP7iaiVoL2PeNthk8UG Mozilla/5.0 (iPhone; CPU iPhone OS 16_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Mobile/15E148 Safari/604.1

GET /l?t=adviser&r=4KQbmSaDsWWWm8gvs-11DHW&c=avDvnrUNfeHQSu8ZXppZYW&u=xaukrq6spKeymw&l=LCHLfWNEKcRy78ihbc74up Mozilla/5.0 (Linux; Android 12; SAMSUNG SM-S124DL) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/20.0 Chrome/106.0.5249.126 Mobile Safari/537.36

GET /l?t=bend&r=4KQbmSaDsWWWm8gvs-11DR8&c=nHet3QX8kNc8BdjtbTmo5x&u=n_z3_u3y_ubx-sD1uQ YahooMailProxy; https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html

GET /l?t=bend&r=4KQbmSaDsWWWm8gvs-11DDK&c=T6yLhvtUJy5NzEARwRj3hq&u=h-7m6ejp9Oz-9-K22Q Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)

Complaints are processed by the incoming email MX server

Last updated