Mail is getting rejected when sent using Mandrill API - php

I am trying to send email using Mandrill API, but I am getting response as below:
{
"email":"_emailid_",
"status":"rejected",
"_id":"967859c539b1416abc2613b5a3619a46",
"reject_reason":"invalid-sender"
}
I am sending the mail by hitting curl call on mandrill api like here.
Can somebody tell me what might be reason for the rejection ?

It's been a long time this question was posted, but I guess I still can contribute.
I had the same issue this week when using MailChimp Transactional API calling a POST method through the command
curl -X POST
https://mandrillapp.com/api/1.0/messages/send-template
-d '{"key":"","template_name":"","template_content":[],"message": etc... }
and I got the error message :
[{"email":"some_name#gmail.com.br","status":"rejected","_id":"2bff316436814a399fafea22fda4a4dd","reject_reason":"recipient-domain-mismatch"}]
Asking MailChimp's support team about this, they reply , after a couple of days, the following :
The recipient domain mismatch reject reason is specific to demo and trial accounts and refers to a limitation in those accounts. Sending is restricted to the domains you have set up in the account already. This means your recipient would need to be on a domain that you have the same setup as mentioned for your sending address. If you change to a paid account, this restriction would be removed automatically and you could send to any recipients. Plainly put, you can only send to domains you have verified/authenticated on the demo mode.
I use a free account. I search the documentation and several other sources in the internet but I found no reference to this free account limitation.
It would be very productive if such limitation was explicitly put.

The good news is that your API key is fine. The bad news is that you probably need to configure the email sender domain so that mandrill knows the sender is valid.

Related

Send email to multiple recipients in one call using AWS SES (PHP SDK)

Is there a way to send an email message to multiple recipients just making one call to AWS? I want the recipient to only see their email address as the only address in the to field.
There is no mention of anything like that in the documentation. The other alternative I've think of is using an almighty loop.The problem with this is that if I have 100 recpients I need to make 100 calls to the API.
I solved with the SendBulkTemplatedEmail API operation.
For more information take a look here: https://aws.amazon.com/it/blogs/messaging-and-targeting/introducing-email-templates-and-bulk-sending/

Specify the "send via"- or "on behalf of"-value in Mandrill

I'm using Mandrill to send E-Mails in my PHP Project and integrated it via the API. So far so good E-Mails go out and arrive their recipient, but something bothers me about the missing SPF and DKIM entries.
When the E-Mails are opened in outlook the "on behalf of" issue occurs (FAQ from mandrills KB). But I can't fix this, since too many of our customers do not have the necessary skills/ access-rights to create a SPF entry for their domain, so we learned to live with that.
We verified our own domain at mandrill to use it as custom sending-domain to get rid of the
from: reallyLongString#mandrillapp.com on behalf of customerName#customerDomain.com
and exchange it with
from: mailbot#ourDomain.com on behalf of customerName#customerDomain.com
but somehow I can't get this to work!
I cannot find an option to set "mailbot" as sender. Even worse, Mandrill makes up a phantasy e-mail-address consisting of customerName#ourDomain.com. If some customer gets the idea to send to this address we've got a disaster upcoming. Also the API does not specify anything like that in the "Messages"-Section.
How can I configure mandrill to send E-Mails with a from-field appearing in outlook like this:
mailbot#ourDomain.com on behalf of customerName#customerDomain.com
? Really cannot find anything in the docs or the web. Thanks in advance!
As Sanuel Jackson already indicated, there is no way to do this WITHOUT doing the whole certification process of creating a SPF entry.
Also confirmed by Mandrill support (which was quite fast AND competent in responding)
I'm now sending with a proper reply-to address and hope, that our customer's customers ignore the funky e-mail adresses... In case they do mind them, our customers are free to engage us regarding a SPF-entry ;-)

Do I need to whitelist any IPs to use Mandrill API?

I am trying to send mail using Mandrill API and I have got following responses :
[{"email":"_emailid_","status":"queued","_id":"772237d78ce74e5c9bd8ccbd9a1cfb8c"}]
{"email":"_emailid_","status":"scheduled","_id":"10a0b596a95e44ddb5e8cf504e3899ce","reject_reason":null},
{"email":"_emailid_","status":"scheduled","_id":"b699d58f021b43b2a0b25d801d1b4f91","reject_reason":null}
But I am not getting any mail on the email addresses sent. Please help.
Do I need to whitelist the IP of the system from where I am doing the curl call ?
You do not need to whitelist any ip addresses, you however do have to configure the DNS records for your email domain properly, head over to the domain settings page in the mandrill control panel for more information.
Everything seems fine.Either your you are not providing correct email to api or mail are coming to your spam folder.You need to check mail from address which you give to the api.
It looks like at least the last two were scheduled, which means they won't send immediately, but rather at the scheduled time in the future. You'll probably want to double check the time and date that they were scheduled to be sure.
For the first one, there are a number of reasons that emails are queued, including if they have attachments that need to be scanned, or if they're part of a large/batch API call. We'd need more information about the API parameters that you passed to determine the reason for it being queued and/or what happened once it was queued.
You can search your Outbound Activity by the recipient email address, subject line, sender, and a number of other criteria for emails that have been sent. Messages that are scheduled but haven't sent yet cannot be searched since they've not been processed. For any messages that have sent, click on the word "Delivered" on the Outbound Activity page to see more details about the response that Mandrill got from the receiving server when delivering the message.

How does GitHub 'Reply by Email' work?

I notice that a lot of websites like Facebook and GitHub allow you to reply to an email notification which then posts the reply back to the application using a unique Reply-To address. How does this work on the back-end? I searched a lot but, only found that people were using unique Reply-To addresses. That's understandable but, what do they use to receive these emails? Do these companies set up email servers? I am trying to build this using PHP.
A common method is to set unique message ID's in the outgoing email and then looking at the In-Reply-To header to see which email this was in reply to. That lets you match up your server application's messaging system to emails. For example, if you send an email that represents a help desk ticket with ID 1234, the Message-ID could be something like
ticket-1234#myserver
Then, in email clients that work nicely (I'm looking at you Android), when you hit Reply, the reply has the header In-Reply-To: ticket-1234#mysever. You can go further by adding security tokens to ensure people can't forge messages (e.g. ticket-1234-hf29e9f2gf2e9fh29f#myserver). That security token is generated on the server when you send your first message and is then confirmed in the reply.
This normally works but can cause real headaches when email clients don't behave as they should!
This is how GitLab manages emails by using an identifier in the email address itself and catching it when the user replies. Although it is not relevant to any scripting language like PHP and uses server configs, this is what backend servers do to support reply by email functionality.
You have to set up a mail server to receive mail answers.
SIEVE filters on a IMAP server could be use to make some actions when a certain filter is detected.
But you can't only use PHP to make that type of system.

How to send validation email without going into the spam folder?

I have a PHP website that send a validation code when a new account is created.
My problem is since few months, a lot of those email goes in the spam folder.
I thought of a solution that is to use an "external service" to send my email instead of simply sending it via the mail function in PHP.
Question : 1) What external service should I use (I guess it would requires to have an API)?
Try using your ISP's or company's server as a relay. Use a sending address which exists, so that validation can be done on it, and bounces sent back to it. You may want to setup a separate domain for verification such as verification.example.com. You could then send the validation message from application#verification.example.com. Replace application and example as appropriate.
You may also want to look at https://serverfault.com/questions/241189/email-delivery-management-grievances#241260.
Have a look at this documentation from Google. It involves your network support including reverse lookup and Domain keys to be present. I think most of the email servers would have similar requisites.
Many times, when using the builtin mail function, the configuration isn't set up to help prevent this from happening. The reason is the Received header is set to an internal IP address, like 192.168.x.x which is used as an indicator to most spam filters. You may want to try finding a simple SMTP class that connects remotely so the headers get set properly.

Categories