Sometimes it is necessary to read data into PhixFlow streams from an email account. For example, if orders are always sent to a specified email address in the same format, it can be an easy way to automate their entry into a database or process them.
To do this, you will need to:
- Configure an email polling service.
- Configure a file collector to gather details of the email message (the body) and any attached files.
Set up service to poll an email account for new messages
Full details for this configuration can be found in emailAccount, but in this article we will cover some common examples.
Step-by-step guide
- Click on Admin → Manage Email Accounts
- Add details for a new account - see examples below for POP3 and IMAP; to make this an inbound account, don't tick the Outbound box
- Click Test Configuration to ensure the settings are correct
- Tick the Enabled box, then save any changes
Some examples follow, but also see the section troubleshooting if you have problems connecting to you email account.
Example Settings using POP3
With POP3 just the main Inbox is polled for messages
Example Settings using IMAP / Office 365
With the IMAP protocol, a Folder can be specified, as in the example below. Emails will be read from this folder under the email account.
If you leave Folder blank, emails will be read directly from the Inbox.
Set up file collector to load email messages and/or attachments
Emails will be collected from the email account you have set up, and stored on the PhixFlow server. From this store, you can read these in using a file collector.
Full details for this configuration are in fileCollector, but in this article we will go through a typical set up which should cover most cases.
The file collector will need to have the following settings (see also the screen shot below):
Field | Value |
---|---|
Source Type | Managed File |
File Type | The type of the attached file, or for reading the email message itself (the body), probably CSV |
File Location Strategy | All Files in Folder |
Tag | If a tag is being set (see below), the tag name surrounded by double quotes. E.g.: "accdataemail" If a tag is not being set: "default" |
Input Directory Expr. | "in" |
Directory Pattern Expression | ".*" |
File Pattern Expression | A pattern to match attached files, e.g. to find attached files with names like "AccData.*xlsx" or if you want to read in the email message (the body) this will be just: "body.txt" |
Archive Directory Expression | "archive" |
Setting a tag
You can set a tag for the emails by including
#tagValue
in the subject line of incoming emails. Note that the resulting tag you use in the file collector will be all in lower case. For example, if incoming emails have a subject line like
PhixFlow input file accounts 20170426 #accDataEmail
then use the tag
"accdataemail"
in your file collector configuration.
You don't need to know this to complete the configuration of the file collector, but sometimes you might find it helpful to be able to find the files delivered by the email polling service.
In system configuration you will have, under the tab System Directories, a setting File Upload Directory. For example:
/opt/phixflow/data/upload
If you have not specified a tag in the subject line of your incoming emails, files will appear in directories:
/opt/phixflow/data/upload/default/in/[date]/[long ID]
E.g.
/opt/phixflow/data/upload/default/in/20170426/ab5dcb71868e47c484d6aa78430393d6
If you have specified a tag in the subject line of the emails, files will appear in directories:
/opt/phixflow/data/upload/[tag]/in/[date]/[long ID]
E.g. with the tag "accdataemail"
/opt/phixflow/data/upload/accdataemail/in/20170426/eebb98c20ce04246b0cee073a510ccde
Archiving
If you set an archive directory, your files will be moved once they have been read in by the file collector. This will be to:
[file upload directory]/[tag]/[archive dir]/[date]/[long ID]
E.g. if you set the archive directory to "archive" (as in the examples above), your files will be moved to directories like:
/opt/phixflow/data/upload/default/archive/20170426/6904c5192d5944bd919d4eee99bc0237
or, if you are using the tag "accdataemail":
/opt/phixflow/data/upload/accdataemail/archive/20170426/6904c5192d5944bd919d4eee99bc0237
Troubleshooting
Authentication Errors
The error below indicates that a successful connection has been made to the mail server, on the correct port and protocol, but one or more of several possible authentication errors has occurred:
- Incorrect Password. As well as checking the password is correct, ensure no special characters are being used such as ampersand as these seem to cause this error.
- Incorrect Username. Double-check that the username is the actual mailbox name as setup on the mail server and not the alias or email address, which may sometimes be different.
- Cannot authenticate. In some cases, the details are correct but the server is refusing to allow authentication to take place, due to the authentication protocol being used. This error is received when attempting to connect to Google Mail because Google requires the username and password to be supplied in an OAuth token.
Timeout / Incorrect Port Error
The error below typically appears are a delay of up to 1 minute and normally indicates the port number being used is the wrong one for the type of operation. For example, you receive this error if trying to send mail using a CenterView Account on port 995 instead of 587.
Incorrect Host or Port Error
The error below appears again if the port number is incorrect, but this is typically if the port is not in use at all. For example, this error is received when attempting to send mail using a CenterView account on port 586 instead of port 587. This error also occurs if the host name is incorrect, for example if attempting to send mail using a CenterView account to smtp.office364.com on port 587, instead of smtp.office365.com.
No Secure Connection
The error below usually occurs if attempting to authenticate without sending the username and password via an encrypted tunnel, when the server requires one. This error is essentially saying that no authentication details were provided, because the mail server is rejecting to allow them to be sent in plain text. This can usually be resolved by supplying the two properties in the configuration:
mail.smtp.auth=true
Which says that authentication will be used and;
mail.smtp.starttls.enable=true
Which creates a secure / encrypted connection, before sending the authentication details.