CRI invitation emails are sent out from the email address cri@bsu.edu by emailrelay.bsu.edu.
Those emails have their return-path values set to the email address of whichever user is submitting the form. This way, the client or admin who's sending an invitation personally receives any error messages that get bounced back by a mailserver.
SPF validation checks the return-path to make sure that domain matches up with the IP address that's attempting to send the email.
This means that for most cases, bsu.edu is sending emails with non-BSU return-path values, and for any non-BSU domains that have SPF validation set up, these emails fail that validation.
Finding a solution
Ideally, errors generated by sending emails find their way to the users who tried to send them.
It doesn't appear that we can plug user email addresses into the return-path to achieve that.
We could develop some means of marking invitation emails (survey id in subject?) so when they get returned to cri@bsu.edu, we can somehow redirect that information back to the client. But this may be impractical to do unless if it were fully automated.
Proposal: Tracking invitations
Create Invitation model (surveyId, respondentId, senderId, status, error, created, modified)
Records are created before emails are sent, and the status field is set to 'not sent'
The invitation ID is included in the subject of the invitation (can it be set in the headers instead, or in any other more discreet way that will still guarantee that it will be accessible from a returned email?)
After sending an email, status is set to 'sent'
If an email error is recorded, status is set to 'error' and error is set to the body of the error message
Allow the client to view invitation history and errors
Proposal: Recording errors
Set up errors.cri@bsu.edu (or something like that)
Set up an EmailErrors model with the BSU mailserver as its datasource
Set up a cron job to regularly check for new messages
When new messages come in, note them in the invitations table and move the messages from that account's inbox to a "recorded" folder
The problem
Finding a solution
Proposal: Tracking invitations
surveyId
,respondentId
,senderId
,status
,error
,created
,modified
)status
field is set to 'not sent'status
is set to 'sent'status
is set to 'error' anderror
is set to the body of the error messageProposal: Recording errors
EmailErrors
model with the BSU mailserver as its datasourceinvitations
table and move the messages from that account's inbox to a "recorded" folder