我无法解决如何使用请求库从Python应用程序使用Mailgun api发送多个内联消息的问题.目前我有(使用jinja2作为模板和烧瓶作为web框架,托管在Heroku上):
def EmailFunction(UserEmail):
Sender = 'testing@test.co.uk'
Subject = 'Hello World'
Text = ''
name = re.sub('@.*','',UserEmail)
html = render_template('GenericEmail.html', name=name)
images = []
imageloc = os.path.join(dirname, 'static')
images.append(open(os.path.join(imageloc,'img1.jpg')))
images.append(open(os.path.join(imageloc,'img2.jpg')))
send_mail(UserEmail,Sender,Subject,Text,html,images)
return html
def send_mail(to_address, from_address, subject, plaintext, html, images):
r = requests.\
post("https://api.mailgun.net/v2/%s/messages" % app.config['MAILGUN_DOMAIN'],
auth=("api", app.config['MAILGUN_KEY']),
data={
"from": from_address,
"to": to_address,
"subject": subject,
"text": plaintext,
"html": html,
"inline": images
}
)
return r
Run Code Online (Sandbox Code Playgroud)
因此,电子邮件发送正常,但最后没有图像在电子邮件中.当我点击下载它们时,它们不显示.根据mailgun api在HTML中引用图像(当然简化了!);
<img src="cid:img1.jpg"/>
<img src="cid:img2.jpg"/>
etc ...
Run Code Online (Sandbox Code Playgroud)
显然我做错了,但是我尝试使用requests.files对象附加这些,它甚至没有发送电子邮件并且没有给出任何错误,因此我认为这根本不是正确的方法.
可悲的是,关于此的文档相当稀少.
让HTML直接指向服务器端图像会更好吗?然而,这并不理想,因为服务器端图像通常不会是静态的(有些会,有些则不会).
这可能是我唯一的问题.我在mailgun帐户中的域名下收到此消息:
Warning: Some of your domains (in red) have DNS configuration issues.
我该怎么办?我尝试了一个巨大的随机域名,它做了同样的事情.
谢谢你看看!
--------------------------如果这不是我唯一的问题---------------- ----------------
我正在使用parse.com和MailGun.我已经设置了所有解析的东西,我已经使用MailGun创建了一个帐户,并使用MailGun添加了一个自定义域名.这是我的iOS代码:
NSDictionary *params = [NSDictionary dictionaryWithObject:@"This is sent from your iPhone." forKey:@"text"];
[PFCloud callFunctionInBackground:@"emailGrocery" withParameters:params block:^(id object, NSError *error)
{
if(!error)
{
NSLog(@"Succeeded");
}
else
{
NSString *errorMsg = [[error userInfo] objectForKey:@"error"];
NSLog(@"%@", errorMsg);
}
}];
Run Code Online (Sandbox Code Playgroud)
这是解析的一个例子.我认为这是应该做的,因为我在日志中收到错误消息.
这是我的云代码:
var Mailgun = require('mailgun');
Mailgun.initialize('domain.com', 'key');
Parse.Cloud.define("emailGrocery", function(request, response) {
Mailgun.sendEmail({
to: "myemail@gmail.com",
from: "myemail@gmail.com",
subject: "Hello from Cloud Code!",
text: "Using Parse and Mailgun is …Run Code Online (Sandbox Code Playgroud) 我正在使用JS,我有以下代码:
var XHRResponse = XHR.send("POST", "https://api.mailgun.net/v2/sandbox224f28ae45a8499d84184fd4c48e62ee.mailgun.org/messages",{
"parameters": {
"from": "Mailgun Sandbox <postmaster@sandbox224f28ae45a8499d84184fd4c48e62ee.mailgun.org>",
"to": "Jordi <myname@gmail.com>",
"subject": "Hello Jordi",
"text": "Congratulations Jordi, you just sent an email with Mailgun! You are truly awesome! You can see a record of this email in your logs: https://mailgun.com/cp/log . You can send up to 300 emails/day from this sandbox server. Next, you should add your own domain so you can send 10,000 emails/month for free."
}
});
Run Code Online (Sandbox Code Playgroud)
我需要使用apikey进行身份验证,但我不知道在哪里以及如何进行身份验证.
谢谢
我们使用Mailgun发送电子邮件,最近我注意到每天都有不少电子邮件被 Gmail 拒绝。
这是我们收到的消息类型:
550
5.7.1 [184.173.153.6 11] Our system has detected that this message is
5.7.1 not RFC 2822 compliant. To reduce the amount of spam sent to Gmail,
5.7.1 this message has been blocked. Please review
5.7.1 RFC 2822 specifications for more information. f15si23385851vdu.1 - gsmtp
Run Code Online (Sandbox Code Playgroud)
RFC 2822规范是一份庞大的文档,因此我没有从头到尾阅读它,但通过查看网络上的资源,我们的电子邮件不会陷入任何会触发 Gmail 此类响应的常见陷阱。
以下是电子邮件标头示例:
Received: by luna.mailgun.net with HTTP; Mon, 29 Jun 2015 21:06:59 +0000
Message-Id: <20150629210659.18668.39318@(domain)>
X-Mailgun-Variables: {"variation": "original", "campaign_code":
"(customValue)"}
Reply-To: (name) <(email)>
X-Mailgun-Track: false
X-Mailgun-Tag: …Run Code Online (Sandbox Code Playgroud) 如何在mailgun中重新发送丢弃的电子邮件?
我正在使用mailgun在我的应用程序中发送邮件,但有些邮件被删除了.有没有方法重新发送丢弃的邮件?
我正在尝试使用requests.post发送带有Mailgun API的附件的电子邮件.
在他们的文档中,他们警告您在发送附件时必须使用 multipart/form-data编码,我正在尝试这样做:
import requests
MAILGUN_URL = 'https://api.mailgun.net/v3/sandbox4f...'
MAILGUN_KEY = 'key-f16f497...'
def mailgun(file_url):
"""Send an email using MailGun"""
f = open(file_url, 'rb')
r = requests.post(
MAILGUN_URL,
auth=("api", MAILGUN_KEY),
data={
"subject": "My subject",
"from": "my_email@gmail.com",
"to": "to_you@gmail.com",
"text": "The text",
"html": "The<br>html",
"attachment": f
},
headers={'Content-type': 'multipart/form-data;'},
)
f.close()
return r
mailgun("/tmp/my-file.xlsx")
Run Code Online (Sandbox Code Playgroud)
我已经定义了标头以确保内容类型是multipart/form-data,但是当我运行代码时,我得到400状态,原因是:Bad Request
怎么了?我需要确保我正在使用multipart/form-data并正确使用附件参数
python multipartform-data email-attachments python-requests mailgun
我正在用 ruby 尝试 mailgun API。我做的第一件事就是注册一个帐户。我有 api_key 和沙盒域处于活动状态。然后,我将自己的电子邮件添加到沙盒域中的授权收件人。我在文档中完全一样:
def send_simple_message
RestClient.post "https://api:key-mykey"\
"@api.mailgun.net/v3/sandboxe5148e9bfa2d4e99a1b02d237a8546fe.mailgun.org/messages",
:from => "Excited User <postmaster@sandboxe5148e9bfa2d4e99a1b02d237a8546fe.mailgun.org>",
:to => "my@email.com, postmaster@sandboxe5148e9bfa2d4e99a1b02d237a8546fe.mailgun.org",
:subject => "Hello",
:text => "Testing some Mailgun awesomness!",
:multipart => true
end
send_simple_message
Run Code Online (Sandbox Code Playgroud)
但它总是返回 400 个错误的请求,这是来自终端的跟踪:
/home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/abstract_response.rb:223:in `exception_with_response': 400 Bad Request (RestClient::BadRequest)
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/abstract_response.rb:103:in `return!'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/request.rb:860:in `process_result'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/request.rb:776:in `block in transmit'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/2.3.0/net/http.rb:853:in `start'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/request.rb:766:in `transmit'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/request.rb:215:in `execute'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/request.rb:52:in `execute'
from /home/ys/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient.rb:71:in `post'
from mailgunner.rb:24:in `send_simple_message'
from mailgunner.rb:33:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?我安装了rest-client gem,所以我认为我的注册有问题还是什么?
我正在尝试点击mailgun的webhook并在meteorjs中接收数据.我正在处理这个事件Router,但是在bounced活动期间,我什么都没发现req.body.
以下是我的代码:
Router.route('/api/v1/mailgun/hooks',{ where: 'server' })
.post(function() {
Router.onBeforeAction(Iron.Router.bodyParser.urlencoded({
extended: false
}));
this.response.setHeader('access-control-allow-origin', 'mailgun.com');
var req = this.request;
var res = this.response;
var values = req;
res.end('Well this is the end');
// console.log('The event is ', values);
var campaignId, campaignId1, recipient, message_id, timestamp, domain, city, client_name, client_os, client_type,
country, device_type, user_agent, ip_address, url = '',event;
if (values.event == 'delivered') {
//Key Values
domain = values['domain'];
event = values['event'];
t_camp = values['X-Mailgun-Tag'];
campaignId = t_camp.split(":")[1]; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Mailgun
'driver' => env('MAIL_DRIVER', 'mailgun'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
MAILGUN_DOMAIN=xxxxxxxxxx,
MAILGUN_SECRET=xxxxxxxxxx,
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
Run Code Online (Sandbox Code Playgroud)
这个错误很奇怪.为什么要尝试连接到Gmail?
Connection could not be established with host smtp.gmail.com [Connection timed out #110]
Run Code Online (Sandbox Code Playgroud)
编辑:
Now I am getting
"mail" => array:9 [?
"driver" => "smtp"
"host" => "smtp.mailgun.org"
"port" => "2525"
"from" => array:2 [?]
"encryption" => null
"username" => null
"password" => null
"sendmail" => "/usr/sbin/sendmail -bs"
"markdown" => array:2 [?
"theme" => "default"
Run Code Online (Sandbox Code Playgroud) 我希望能够从 foo@*.mydomain.com 发送并接收响应,而无需为我感兴趣的每个子域(bar.mydomain.com、baz.mydomain.com 等)手动设置 MX 记录。 com , ...)
Mailgun 文档显示了一个名为wildcard“Mailgun 允许您在单个域的多个子域接收电子邮件而无需实际添加它们的域上的设置。您仍然需要在您的 DNS 提供商处为您的子域添加适当的 MX 记录”网络用户界面。
对此ServerFault 答案的评论似乎暗示必须为每个子域创建一个新的 MX 记录。我宁愿不必这样做,而只需通过以下方式保持动态:
@ IN MX 10 mxa.mailgun.org.
@ IN MX 10 mxb.mailgun.org.
*.mydomain.com. IN MX 10 mxa.mailgun.org.
*.mydomain.com. IN MX 10 mxb.mailgun.org.
Run Code Online (Sandbox Code Playgroud)
Mailgun 是否支持从通配符子域发送和接收?如果是这样,应该添加哪些 DNS 记录(MX 和 SPF/DKIM)?
(这个有点相关的问题没有列出具体细节。)