user1055761
user1055761

Reputation: 1071

Unable to send mail via Mailgun over api or smtp

I have setup a new account and not verified my domain. I would like to test and confirm mail-send before proceeding with verification and adding payment information.

I have tried curl using the sandbox method and api key (including smtp). I have also tried to use my domain using the top account mail-address as recipient. But each time the send command (both curl and smtp) I get "Mailgun Magnificent API" response - but no mail is delivered. So far the Mailgun API does not look so Magnificent... I have gone through the documentation multiple times and cannot find what I might be doing wrong..

Any help is much appreciated.

Upvotes: 12

Views: 16237

Answers (5)

Darío León
Darío León

Reputation: 700

Including an slash "/" after messages url part at the end causes this failure too.

For example if you are using a library like Refit for c#, ensure your service interface be declared like this (see the Post attribute):

public interface IMailgunService
{
    [Post("")]
    Task<JsonDocument> SendEmailAsync([Body(BodySerializationMethod.UrlEncoded)] Dictionary<string, object> data);
}

Upvotes: 1

Bruce Tong
Bruce Tong

Reputation: 1431

The problem for me was not including my domain name in the url and trying to type everything onto a single line. Strictly following their online example. Typing a backslash will bring your cursor to a new line.

$ curl -s --user 'api:key-xxx' \
https://api.mailgun.net/v3/your_domain/messages \
-F from='User <[email protected]>' \
-F to='[email protected]' \
-F subject='Hello' \
-F text='Testing some mailgun!'

Response

{
  "id": "<xxx.x.xxx@your_domain>",
  "message": "Queued. Thank you."
}

Upvotes: 0

aifodu
aifodu

Reputation: 304

The mailgun guide shows you to use https://api.mailgun.net/v3/YOUR_DOMAIN as YOUR_DOMAIN_NAME as in the snippet below and this was the problem.

If you're using mailgun-js, you simply need to have YOUR_DOMAIN as YOUR_DOMAIN_NAME.

No need for the https://api.mailgun.net/v3 part

const API_KEY = 'YOUR_API_KEY';
const DOMAIN = 'YOUR_DOMAIN_NAME';
const mailgun = require('mailgun-js')({apiKey: API_KEY, domain: DOMAIN});

const data = {
  from: 'Excited User <[email protected]>',
  to: '[email protected], [email protected]',
  subject: 'Hello',
  text: 'Testing some Mailgun awesomeness!'
};

mailgun.messages().send(data, (error, body) => {
  console.log(body);
});

Upvotes: 1

medmunds
medmunds

Reputation: 6261

For anyone else trying to figure out what "Mailgun Magnificent API" means in a Mailgun HTTP 200-OK API response, it occurs when posting to https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/some/api/endpoint when /some/api/endpoint is not a valid Mailgun API endpoint.

If you are using a client library, there's probably a mistake in your Mailgun sender domain setting. Say you've verified the domain mg.example.com with Mailgun. Examples that can result in "Mailgun Magnificent API" (the exact setting name depends on the library):

  • MAILGUN_DOMAIN = mg.example.com # comment—this is a common mistake in dotenv files, which don't usually support inline comments; move the # comment to its own line
  • MAILGUN_DOMAIN = mg.example.com/mysite—get rid of the /mysite part

If you are posting directly to the Mailgun API (or developing a client library), there are some additional ways you might get "Mailgun Magnificent API":

  • Omitting the API endpoint: https://api.mailgun.net/v3/mg.example.com (as noted in another response)
  • Misspelling the endpoint: https://api.mailgun.net/v3/mg.example.com/massages (that should be messages with an e)
  • Including a # or ? after your domain: https://api.mailgun.net/v3/mg.example.com #/messages (see the note above about comments in config files)
  • Including an extra path after your domain: https://api.mailgun.net/v3/mg.example.com/route/to/my/app/messages

Note that you won't see "Mailgun Magnificent API" if YOUR_DOMAIN_NAME is not a valid sending domain you've registered with Mailgun. (In that case, Mailgun instead responds 404-Not Found).

Upvotes: 12

Pavlo  Sukhorukov
Pavlo Sukhorukov

Reputation: 434

Faced the same issue while sending emails via api by php curl. I solved it by changing API Base URL https://api.mailgun.net/v3/YOUR_DOMAIN_NAME to https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages. It's because their api is not only for sending. Hope this helps.

Upvotes: 28

Related Questions