I managed to create all that code that creates mailgun webhooks plus many other things like record responses to local database.
During my tests I send emails to yahoo & gmail and of course - as you expected - I pressed a couple of times the spam button at my tablet's yahoo app to test and verify the events recorded with my code.
My problem is that now when I send to that yahoo address from the domain under test the email never reaches my inbox and at the logs I read:
4.7.0 [TSS04] Messages from 159.135.140.82 temporarily deferred due to user complaints - 4.16.55.1; see https://postmaster.verizonmedia.com/error-codes
See what mailgun reports:
{
"severity": "temporary",
"tags": [
"issue 1",
"newsletter",
"2020"
],
"mailing-list": {
"list-id": "xyz101.mail.mysite.com",
"sid": "1634752",
"address": "xyz101#mail.mysite.com"
},
"storage": {
"url": "https://storage.eu.mailgun.net/v3/domains/mail.mysite.com/messages/AgEFucSTB0eaifXAHzlNKbRoSH0IddfpZA==",
"key": "AgEFucSTB0eaifXAHzlNKbRoSH0IddfpZA=="
},
"delivery-status": {
"tls": true,
"mx-host": "mx-eu.mail.am0.yahoodns.net",
"attempt-no": 1,
"description": "",
"session-seconds": 0.39575695991516113,
"retry-seconds": 600,
"code": 421,
"message": "4.7.0 [TSS04] Messages from 159.135.140.82 temporarily deferred due to user complaints - 4.16.55.1; see https://postmaster.verizonmedia.com/error-codes",
"certificate-verified": true
},
"recipient-domain": "yahoo.co.uk",
"id": "D5IqK77PRA29RvULyzXLsw",
"campaigns": [],
"reason": "generic",
"user-variables": {
"id": "15"
},
"flags": {
"is-routed": false,
"is-authenticated": true,
"is-system-test": false,
"is-test-mode": false
},
"log-level": "warn",
"timestamp": 1604915932.781863,
"envelope": {
"transport": "smtp",
"sender": "sales#mail.mysite.com",
"sending-ip": "159.135.140.82",
"targets": "blah-blah-blah#yahoo.co.uk"
},
"message": {
"headers": {
"to": "cent C. <blah-blah-blah#yahoo.co.uk>",
"message-id": "20201109095852.1.8EC4631A16DA1C10#mail.mysite.com",
"from": "mysite <sales#mail.mysite.com>",
"subject": "test_MailGunHttpClient_send_from_real_domain_with_tags_with_tracking_opens_and_clicks_with_unsubscribe_enabled_and_with_recipient_variables_visible_to_webhooks_to_mailing_list_of_access_type_readonly"
},
"attachments": [],
"size": 2130
},
"recipient": "blah-blah-blah#yahoo.co.uk",
"event": "failed"
}
This message eventually will become severity: "permanent".
Any idea how I can reverse this behavior at yahoo servers not accepting my emails(*)?
(*) For another domain I setup at Mailgun I inspect deliverability as I haven't clicked the spam button for emails landed from that domain
Looks like your actions have had some repercussions, emails from one of our accounts using the same IP are blocked by Yahoo, Aol etc. And it started for no reason related to us, the recipients or the content of the emails (it is a paid newsletter).
Related
I have some problem when integrating AWS SES into my website as it bounced every email that I sent out from the AWS EC-2 but it does not trigger the AWS SNS bounce topic and subscription that created by our own.
I also include the response that we got from the AWS SNS notification subscription. We have even requested reassociate EC-2 IP address to solve this issue but it does not stop the bounce email occurred.
P/S: The email recipient has been verified before the outgoing email is sent out. Thus, all outgoing emails are intended to send the email recipient who has agreed to receive this email. Email content does not include any spam and fraud contents.
"notificationType": "Delivery",
"mail": {
"timestamp": "2020-12-08T08:02:45.195Z",
"source": "qx.wong#inkrment.com",
"sourceArn": "arn:aws:ses:ap-southeast-1:272232267615:identity/qx.wong#inkrment.com",
"sourceIp": "55.77.21.130",
"sendingAccountId": "172232267615",
"messageId": "010e0176415fc94b-f951e6c0-5c95-47b9-9613-41a3fb974278-000000",
"destination": [
"trainertxt#gmail.com"
],
"headersTruncated": false,
"headers": [
{
"name": "Received",
"value": "from api#inkrment.com (ec2-55-77-21-130.ap-southeast-1.compute.amazonaws.com [55.77.21.130]) by email-smtp.amazonaws.com with SMTP (SimpleEmailService-d-3QN6IBWB7) id fIYbsPB5EHvivGZ9MG5U for trainertxt#gmail.com; Tue, 08 Dec 2020 08:02:45 +0000 (UTC)"
},
{
"name": "Date",
"value": "Tue, 8 Dec 2020 16:02:45 +0800"
},
{
"name": "To",
"value": "trainertxt#gmail.com"
},
{
"name": "From",
"value": "Inkrment Software Solution <qx.wong#inkrment.com>"
},
{
"name": "Reply-To",
"value": "qx.wong#inkrment.com"
},
{
"name": "Subject",
"value": "Join us at Kuala Lumpur Exhibition"
},
{
"name": "Message-ID",
"value": "<29Yh0Xfgt6O5JGnlKrKxaUxFUzBzhlI2vpWvVFJSg#api.inkrment.com>"
},
{
"name": "X-Mailer",
"value": "PHPMailer 6.1.5 (https://github.com/PHPMailer/PHPMailer)"
},
{
"name": "List-Unsubscribe",
"value": "<mailto:qx.wong#inkrment.com?subject=Unsubscribe>, <https://unsubscribe.inkrment.com?emailId=23082833473483>"
},
{
"name": "List-Unsubscribe-Post",
"value": "List-Unsubscribe=One-Click"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "Content-Type",
"value": "multipart/alternative; boundary=\"b1_29Yh0Xfgt6O5JGnlKrKxaUxFUzBzhlI2vpWvVFJSg\""
},
{
"name": "Content-Transfer-Encoding",
"value": "8bit"
}
],
"commonHeaders": {
"from": [
"Inkrment Software Solution <qx.wong#inkrment.com>"
],
"replyTo": [
"qx.wong#inkrment.com"
],
"date": "Tue, 8 Dec 2020 16:02:45 +0800",
"to": [
"trainertxt#gmail.com"
],
"messageId": "<29Yh0Xfgt6O5JGnlKrKxaUxFUzBzhlI2vpWvVFJSg#api#inkrment.com>",
"subject": "Join us at Kuala Lumpur Exhibition"
}
},
"delivery": {
"timestamp": "2020-12-08T08:02:46.759Z",
"processingTimeMillis": 1564,
"recipients": [
"trainertxt#gmail.com"
],
"smtpResponse": "250 2.0.0 OK 1607414566 s5si2013138pjz.147 - gsmtp",
"remoteMtaIp": "172.217.194.27",
"reportingMTA": "e232-6.smtp-out.ap-southeast-1.amazonses.com"
}
}
Reputation dashboard
Have You configured specified configuration sets and provided list of SNS topics for all of the events(I see that Delivery was provided, but did You also provided SNS topic for bounced emails). Also does Your emails which are being sent, have enabled bounce notifications? (In SES You need to allow it explicitly for all of the notification types which You need)
I'm receiving "I'm unable to reach the requested skill" message from an Alexa dashboard testing console for the skill that used to work before (with no modifications to any underlying infrastructure or code).
Here's the error obtained from Alexa's device logs:
{
"header": {
"namespace": "SkillDebugger",
"name": "CaptureError",
"messageId": "57d00be6-19d6-4529-b0b1-4c5d6c2760ac"
},
"payload": {
"skillId": "amzn1.ask.skill.db1bac88-183d-409c-9d3e-0e69fa0f5fe2",
"timestamp": "2018-09-27T19:11:51.066Z",
"dialogRequestId": "d9ec106d-2ef2-4526-a156-f4714ce5d034",
"skillRequestId": "amzn1.echo-api.request.1e166266-56e1-4c51-b40a-3ceb144f997f",
"code": "SKILL_ENDPOINT_ERROR",
"description": "An error occurred while issuing a SpeechletRequest for (requestId [amzn1.echo-api.request.1e166266-56e1-4c51-b40a-3ceb144f997f]",
"debuggingInfo": {
"type": "SkillExecutionInfo",
"content": {
"invocationRequest": {
"endpoint": "https://emptio.serveo.net/abc/api/v1/alexa",
"body": {
"version": "1.0",
"session": {
"new": false,
"sessionId": "amzn1.echo-api.session.bfc02d53-fe83-4c70-b731-ea7ede99d20a",
"application": {
"applicationId": "amzn1.ask.skill.db1bac88-183d-409c-9d3e-0e69fa0f5fe2"
},
"user": {
"userId": "amzn1.ask.account.AGX2NO3NXXDS6NLEZMDZXMRZZPJ3DLEERYK7J3NUPFUYRADFB2HRILB7BZVTN336OFVSNFFUP3VDVFHERK5PKQE5H32EQ5GGWTT67EMDQKP22Q7NTXXNYDUTYNCYI6EJUEODQ54VHKW4JSWVCS7JINWLYH2LICQVETFGZBY6NBDJVEX66VCGCZMRTFZYAG2E3IXDPMPVF3U4VMY",
"accessToken": "Atza|IwEBIM_YZylf-iVoydW0WhXTS4ykk6oA0FwI9Aa7Pdz_pysLPaL1AJwQLXA-Y1GJabHTWMJxfDEKyIiLFuxEPnTxuYaEDyany7WXzHMOd0-iiD9lYBxE6rIXkC3Z-I5PYU6DQtkT6DHxbusrkyGTb1bSfbznIaaFat3yNvKY9mXaNHEEhuuPRZJkXjffBA9WKzWrkGetOdHVvo-PLw2w9rWUiQQuJ6ryzQjugYILyCuTry3qz8lvqWGxYX0XB3dx_CGuzjEnNP0-X2ozhLXN8cBjtBrl7MlTffNyo6K94vi24-16bdIdFZG3mVL_bKSCXzAx2qzPJvBCn953FrPVw9zd7CtOintRSBDZ9Aw_QgKqTklliWTBP_8uRqq_nuMB8s992-Yhi6Zb-k7VvyYp7oLtJ8ggRqRlRk9vS4HBxyfKCxvfXmvlmZJlAtGjec_-Bx8UB2pf1ZH0xi-2LYpezVh2e7dgWenKU0PHvtduprVtpO4E72148mddcYyQRzAEdk8LYQx1SiamYY64_qmkv14h1qBPUIQPuv3MFt2PB7Mhm6cVTA"
}
},
"context": {
"System": {
"application": {
"applicationId": "amzn1.ask.skill.db1bac88-183d-409c-9d3e-0e69fa0f5fe2"
},
"user": {
"userId": "amzn1.ask.account.AGX2NO3NXXDS6NLEZMDZXMRZZPJ3DLEERYK7J3NUPFUYRADFB2HRILB7BZVTN336OFVSNFFUP3VDVFHERK5PKQE5H32EQ5GGWTT67EMDQKP22Q7NTXXNYDUTYNCYI6EJUEODQ54VHKW4JSWVCS7JINWLYH2LICQVETFGZBY6NBDJVEX66VCGCZMRTFZYAG2E3IXDPMPVF3U4VMY",
"accessToken": "Atza|IwEBIM_YZylf-iVoydW0WhXTS4ykk6oA0FwI9Aa7Pdz_pysLPaL1AJwQLXA-Y1GJabHTWMJxfDEKyIiLFuxEPnTxuYaEDyany7WXzHMOd0-iiD9lYBxE6rIXkC3Z-I5PYU6DQtkT6DHxbusrkyGTb1bSfbznIaaFat3yNvKY9mXaNHEEhuuPRZJkXjffBA9WKzWrkGetOdHVvo-PLw2w9rWUiQQuJ6ryzQjugYILyCuTry3qz8lvqWGxYX0XB3dx_CGuzjEnNP0-X2ozhLXN8cBjtBrl7MlTffNyo6K94vi24-16bdIdFZG3mVL_bKSCXzAx2qzPJvBCn953FrPVw9zd7CtOintRSBDZ9Aw_QgKqTklliWTBP_8uRqq_nuMB8s992-Yhi6Zb-k7VvyYp7oLtJ8ggRqRlRk9vS4HBxyfKCxvfXmvlmZJlAtGjec_-Bx8UB2pf1ZH0xi-2LYpezVh2e7dgWenKU0PHvtduprVtpO4E72148mddcYyQRzAEdk8LYQx1SiamYY64_qmkv14h1qBPUIQPuv3MFt2PB7Mhm6cVTA"
},
"device": {
"deviceId": "amzn1.ask.device.AGUTTO7VCXPCUUSXNDCNO6LK7LZHUKPDGZBOXUOBNRNOBGD7FHBJWHOK3LJNQX4U47HTFLUXJ6MHBL6V7UCDNTWOMBJIP5R4R2ZVK3XJX42PEZG6J6TCS3U7NSYZZ3PDCUSH22CY7LYGNIK2MGXCUGR4ITQQ",
"supportedInterfaces": {}
},
"apiEndpoint": "https://api.amazonalexa.com",
"apiAccessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJhdWQiOiJodHRwczovL2FwaS5hbWF6b25hbGV4YS5jb20iLCJpc3MiOiJBbGV4YVNraWxsS2l0Iiwic3ViIjoiYW16bjEuYXNrLnNraWxsLmRiMWJhYzg4LTE4M2QtNDA5Yy05ZDNlLTBlNjlmYTBmNWZlMiIsImV4cCI6MTUzODA3OTEwNywiaWF0IjoxNTM4MDc1NTA3LCJuYmYiOjE1MzgwNzU1MDcsInByaXZhdGVDbGFpbXMiOnsiY29uc2VudFRva2VuIjpudWxsLCJkZXZpY2VJZCI6ImFtem4xLmFzay5kZXZpY2UuQUdVVFRPN1ZDWFBDVVVTWE5EQ05PNkxLN0xaSFVLUERHWkJPWFVPQk5STk9CR0Q3RkhCSldIT0szTEpOUVg0VTQ3SFRGTFVYSjZNSEJMNlY3VUNETlRXT01CSklQNVI0UjJaVkszWEpYNDJQRVpHNko2VENTM1U3TlNZWlozUERDVVNIMjJDWTdMWUdOSUsyTUdYQ1VHUjRJVFFRIiwidXNlcklkIjoiYW16bjEuYXNrLmFjY291bnQuQUdYMk5PM05YWERTNk5MRVpNRFpYTVJaWlBKM0RMRUVSWUs3SjNOVVBGVVlSQURGQjJIUklMQjdCWlZUTjMzNk9GVlNORkZVUDNWRFZGSEVSSzVQS1FFNUgzMkVRNUdHV1RUNjdFTURRS1AyMlE3TlRYWE5ZRFVUWU5DWUk2RUpVRU9EUTU0VkhLVzRKU1dWQ1M3SklOV0xZSDJMSUNRVkVURkdaQlk2TkJESlZFWDY2VkNHQ1pNUlRGWllBRzJFM0lYRFBNUFZGM1U0Vk1ZIn19.LzPCt8QPxkEa5jFK3IMGMQLWS3vXOopyGKBu0cAy1cnJzAk7wnbKwc9eyQYDMr3uH7MyHr4s7xUKpWlvspGOAL3LqKxFbxqpB5zIjhKifqdGQhB_nurOAjeyZOipZ0ZhSuPN9fqTwp7zwca4LdYz6Kuahklz7D7pU7ICNI1DNqNKDx9HmyWbJIwXWL3MvS9sEujDo15oTdiueNaCbC7kLnPi0adrukHy3J6HVN_XjWS5mSSawuObgiT2b9eLm4qntoMG7MnDTSrzxmhKgXm3WrbFxRW_ZKE3uu1wa7-412f8DPxvbVZkeYDRwWMTO8s7BtnzjPcKEcT6daLXKRgpVw"
}
},
"request": {
"type": "SessionEndedRequest",
"requestId": "amzn1.echo-api.request.1e166266-56e1-4c51-b40a-3ceb144f997f",
"timestamp": "2018-09-27T19:11:47Z",
"locale": "en-US",
"reason": "ERROR",
"error": {
"type": "INVALID_RESPONSE",
"message": "An exception occurred while dispatching the request to the skill."
}
}
}
},
"invocationResponse": null,
"metrics": {
"skillExecutionTimeInMilliseconds": 3107
}
}
}
}
}
As is seen from the above response, the skill is configured with an endpoint: https://emptio.serveo.net/abc/api/v1/alexa which is perfectly reachable.
Again, the same exact skill used to work just yesterday. The invocation name under which I am calling it used to work fine.
I'm able to reach and verify the above endpoint is functional and responsive outside Alexa, but it's somehow not reachable from the Alexa dashboard.
I'm monitoring the logs from Serveo - they don't show any activity, meaning that something is broken before the webhook is called.
What could be the reason for the error? How can I debug what is going on in the Alexa stack?
Make sure option for the endpoint's SSL certificate type is correct. You can change this in the endpoint option in the web development console.
Your host might be using a wildcard certificate so select the wildcard option, save your endpoint again - then test again using the console for reachability.
I've followed this Slack tutorial to create an onboarding bot that gives people a few tips on how to interaction with other members. The tutorial recommends using Postman to test onboard experience, but it's not clear on how. I'm getting stuck on this: where do I put the a authorization token?
Prereqs:
ngrok is running on port 9292
rackup was run to start the server
I followed all steps to configure the Slack app as shown in the tutorial
I clicked the Slack button to authorize the application
What I'm doing:
Using Postman macOS client to send this default JSON event for team_join to the /events endpoint:
{
"type": "team_join",
"user": {
"id": "U023BECGF",
"name": "bobby",
"deleted": false,
"color": "9f69e7",
"profile": {
"first_name": "Bobby",
"last_name": "Tables",
"real_name": "Bobby Tables",
"email": "bobby#slack.com"
},
"is_admin": true,
"is_owner": true,
"is_primary_owner": true,
"is_restricted": false,
"is_ultra_restricted": false,
"has_2fa": false,
"two_factor_type": "sms"
}
}
I've tried including token as a parameter, header key/value and within the JSON object. None of these approaches seems to do it and it results in an authorization error. I get Invalid Slack verification token received: or a parsing issue.
How does one test something like a new user joining using this setup?
The token is available within the Event envelope, so you'll need to go up one level in the JSON:
{
"token": "{{verification_token}}",
"team_id": "{{team_id}}",
"api_app_id": "{{app_id}}",
"event": {
"type": "team_join",
"user": {
"id": "{{user_id}}",
"team_id": "{{team_id}}",
"name": "{{user_name}}",
"deleted": false,
"status": null,
"real_name": "{{user_real_name}}",
"profile": {
"first_name": "{{user_first_name}}",
"last_name": "{{user_last_name}}",
"real_name": "{{user_real_name}}",
"real_name_normalized": "{{user_real_name}}"
},
"is_bot": false
}
},
"type": "event_callback",
"authed_users": ["{{authed_user}}"]
}
i am trying to use the redmine API to create new issue via code,
just to test it i am trying to send the data to the API using postman.
i have used amazon to host it.
I try send json via post method. (using postman -plugin for chrome)
url:- http://{user_name}:{password}#xxxredmine_urlxxx/issues.json
type:- POST
Body:-
{
"issue": {
"project_id": 1,
"subject": "New ticket via API",
"description": "API test 27\/6",
"status_id": 1,
"priority_id": 3,
"assigned_to_id": 5
}
}
it creates a ticket successfully but never sets an assignee
{
"issue": {
"id": 61,
"project": {
"id": 1,
"name": "EasySoft"
},
"tracker": {
"id": 1,
"name": "Bug"
},
"status": {
"id": 1,
"name": "New"
},
"priority": {
"id": 3,
"name": "High"
},
"author": {
"id": 1,
"name": "UserName LastName Admin"
},
"subject": "New ticket via API",
"description": "API test 27/6",
"start_date": "2016-06-27",
"done_ratio": 0,
"custom_fields": [
{
"id": 2,
"name": "Customer name",
"value": ""
}
],
"created_on": "2016-06-27T09:37:58Z",
"updated_on": "2016-06-27T09:37:58Z"
}
}
i have tried changing assigned_to_id to
"assigned_to":{"id":5}
Thank you in advance.
This is an old question but potentially still useful to answer... are you certain that the user you are attempting to set as the assignee is in an assignable role on that specific project? Unfortunately, the Redmine REST API will respond with a 200 OK even if you give it a non-assignable user, so there's no indication that it was unable to successfully set the user as the assignee.
How can we get the phone number with Google OAuth API login.
I am using scopes as
'scope' : 'https://mail.google.com https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.login '
and the request is as
var request = gapi.client.plus.people.get({'userId': 'me'});
Is there any scope we can use to get it.
I am getting response as with no sight of phone number :
{
"kind": "plus#person",
"etag": "\"vPymIyv1bT9LfmoUujkgN2yLMK0\"",
"gender": "male",
"emails": [
{
"value": "XXX#gmail.com",
"type": "account"
}
],
"urls": [
{
"value": "http://picasaweb.google.com/XXX",
"type": "otherProfile",
"label": "Picasa Web Albums"
}
],
"objectType": "person",
"id": "4354354334435465",
"displayName": "XXXXX YYYY",
"name": {
"familyName": "XXX",
"givenName": "YYYYY"
},
"url": "https://plus.google.com/1100335464643327",
"image": {
"url": "https://lh3.googleusercontent.com/-fgsdgfgU9-jU/AAAAAAAAAAI/AAAAAAAADkM/fgffdgdkM/photo.jpg?sz=50",
"isDefault": false
},
"isPlusUser": true,
"language": "en",
"ageRange": {
"min": 21
},
"circledByCount": 59,
"verified": false
}
if you want to get user phone numbers you have to have authorization from the user: see the following info page : https://developers.google.com/admin-sdk/directory/v1/guides/authorizing
ask the user for this scope of authorization :
https://www.googleapis.com/auth/admin.directory.user.readonly
after you have authorization from user run the folowing request :
GET https://www.googleapis.com/admin/directory/v1/users/userKey
the response will be a JSON response formatted as followed:
https://developers.google.com/admin-sdk/directory/v1/reference/users#resource
one of the attributes is phone list.
hope it helps.
You can use google's people API to get the user's phone numbers.
To explore more you can try yourself.
Steps to explore:
Visit this link.
Select https://www.googleapis.com/auth/user.phonenumbers.read permission in People API v1 section
Click on Authorize API
Choose the account to log in
Grant permission
Click Exchange authorization code for tokens
Enter https://people.googleapis.com/v1/people/138262720636785143353?personFields=phoneNumbers,emailAddresses link, make sure you replace the UID
Click on send request to see the response