From 5a0828176e219a36e211f2ec637295e973273fe9 Mon Sep 17 00:00:00 2001 From: Zaftula Date: Fri, 3 Jun 2016 13:47:14 -0600 Subject: [PATCH 1/9] Delete how_sendgrid_handles_550_requested_action_not_taken_mailbox_unavailable_bounces.md Out of date and too situational. Deleting per Deliverability Team suggestion. --- ...n_not_taken_mailbox_unavailable_bounces.md | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 source/Classroom/Deliver/Undeliverable_Email/how_sendgrid_handles_550_requested_action_not_taken_mailbox_unavailable_bounces.md diff --git a/source/Classroom/Deliver/Undeliverable_Email/how_sendgrid_handles_550_requested_action_not_taken_mailbox_unavailable_bounces.md b/source/Classroom/Deliver/Undeliverable_Email/how_sendgrid_handles_550_requested_action_not_taken_mailbox_unavailable_bounces.md deleted file mode 100644 index dd4ae7c03c..0000000000 --- a/source/Classroom/Deliver/Undeliverable_Email/how_sendgrid_handles_550_requested_action_not_taken_mailbox_unavailable_bounces.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -seo: - title: How SendGrid handles "550 Requested action not taken: mailbox unavailable" bounces - description: How SendGrid handles 550 Requested action not taken: mailbox unavailable bounces - keywords: drop, bounce, not, 500, unavailable, transactional, delivery, 550 Requested action not taken: mailbox unavailable, requested, taken, mailbox -title: How SendGrid handles "550 Requested action not taken: mailbox unavailable" bounces -weight: 0 -layout: page -zendesk_id: 207907288 -navigation: - show: true ---- - -Senders may have noticed a rise in hard bounces within the last week. This is due to a recent change in the way our systems are treating the specific response code “ **550 Requested action not taken: mailbox unavailable** ”. - -Despite the fact that a very small percentage of addresses that return this bounce will occasionally log successful delivery events, or even opens and clicks. _**We have decided that these responses should be treated as hard bounces, and sending should not be reattempted.**_ - -We have found that over 99% of email addresses returning this bounce reason never have a successful delivery. - -**Because sending to previously bounced addresses can negatively impact sending reputation, it is in our sender’s best interest to treat this response as a hard bounce and [drop subsequent sending]({{root_url}}/Classroom/Deliver/Undeliverable_Email/my_emails_are_being_dropped.html). The increase in hard bounces, particularly at Microsoft domains, may last for some time yet this is an important step to maximize deliverability and protect the reputation of our senders.** From c9a96bfe4b453557c4136d7b9b703e2c77aac398 Mon Sep 17 00:00:00 2001 From: Eric Schallock Date: Tue, 7 Jun 2016 13:42:35 -0600 Subject: [PATCH 2/9] Removed outdated Classroom page from Index This article is out of date and too situational. Removing from index before the file is deleted. --- source/Classroom/Deliver/index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/source/Classroom/Deliver/index.html b/source/Classroom/Deliver/index.html index 0d046a45da..ea98b14a09 100644 --- a/source/Classroom/Deliver/index.html +++ b/source/Classroom/Deliver/index.html @@ -100,7 +100,6 @@

Undeliverable Email

  • Help, My emails aren't being delivered!
  • How can I guarantee my emails arrive in my recipients inbox?
  • How do I keep emails from dropping?
  • -
  • How SendGrid handles "550 Requested action not taken: mailbox unavailable" bounces
  • My Emails Are Being Blocked
  • My Emails Are Being Dropped
  • My Emails Are Going to Spam
  • From 6f7ef9a421191228ed52b1a42fa4393c52b817fe Mon Sep 17 00:00:00 2001 From: Zaftula Date: Tue, 7 Jun 2016 14:44:51 -0600 Subject: [PATCH 3/9] Update what_do_i_do_if_im_blacklisted.md Adding a few more BL delisting links and a few minor edits. --- .../what_do_i_do_if_im_blacklisted.md | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md b/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md index 1b189605a0..0faca463d4 100644 --- a/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md +++ b/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md @@ -1,4 +1,7 @@ --- +st: + published_at: 2016-06-07 + type: Classroom seo: title: What do I do if I'm blacklisted? description: What do I do if I'm blacklisted? @@ -15,7 +18,7 @@ Ending up on a blacklist can be detrimental to your domain’s email deliverabil -**Shared IP Plans (Free, Lite, Bronze, Shared Marketing)** +**Shared IP Plans (Free, Legacy Lite, and Essentials)** @@ -23,7 +26,7 @@ If you are on one of our shared IP plans and you notice a block message based on -**Dedicated IP Plans (Silver, Gold, Platinum, High Volume)** +**Dedicated IP Plans (Pro, and Premier)** @@ -54,11 +57,15 @@ Below are links to the delisting forms used by the more popular external blackli - [AT&T](http://rbl.att.net/cgi-bin/rbl/block_admin.cgi "Link: http://rbl.att.net/end\_user\_request2.html")\* - [Barracuda](http://www.barracudacentral.org/rbl/removal-request) +- [Cloudmark](https://csi.cloudmark.com/en/reset/) - [Comcast](http://postmaster.comcast.net/block-removal-request.html) - [Google](https://support.google.com/mail/contact/msgdelivery) - [McAfee](https://secure.mcafee.com/apps/mcafee-labs/threat-feedback.aspx) - [Microsoft/Outlook](https://support.live.com/eform.aspx?productKey=edfsmsbl3&ct=eformts) - [Mimecast](http://www.mimecast.com/senderfeedback) +- [Office365](https://sender.office.com/) +- [ProofPoint](https://support.proofpoint.com/dnsbl-lookup.cgi) +- [SORBS](http://www.sorbs.net/overview.shtml) - [SpamCop](http://www.spamcop.net/bl.shtml) - [Spam Rats](http://www.spamrats.com/removal.php) - [Spamhaus](http://www.spamhaus.org/lookup/) @@ -66,6 +73,9 @@ Below are links to the delisting forms used by the more popular external blackli - [Trend Micro](https://ers.trendmicro.com/reputations) - [URIBL](https://admin.uribl.com/) - -_\*AT&T's delisting request form URL will be changing on a regular basis according to their website so we will try to keep our link to them up-to-date._ +*IMPORTANT NOTE:* If you request a delisting from a blacklisting service, and don't do anything to change the behavior that caused the listing in the first place, it is likely to occur again. Depending on the blacklist, it can be progressively harder to get delisted after the second or third listing. Blacklists are in place + +###TL;DR: Don't delist from major blacklists without a plan in place to address the issue that caused the listing! + + From 502ef62e11b82fae54e786fb452043bc8e18c085 Mon Sep 17 00:00:00 2001 From: Zaftula Date: Tue, 7 Jun 2016 14:50:52 -0600 Subject: [PATCH 4/9] Update what_do_i_do_if_im_blacklisted.md --- .../Undeliverable_Email/what_do_i_do_if_im_blacklisted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md b/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md index 0faca463d4..bee2bb30a6 100644 --- a/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md +++ b/source/Classroom/Deliver/Undeliverable_Email/what_do_i_do_if_im_blacklisted.md @@ -76,6 +76,6 @@ Below are links to the delisting forms used by the more popular external blackli *IMPORTANT NOTE:* If you request a delisting from a blacklisting service, and don't do anything to change the behavior that caused the listing in the first place, it is likely to occur again. Depending on the blacklist, it can be progressively harder to get delisted after the second or third listing. Blacklists are in place -###TL;DR: Don't delist from major blacklists without a plan in place to address the issue that caused the listing! +###TL;DR: Don't delist from major blacklists without a plan in place to address the issue that caused the listing! [Learn more about how to avoid and mitigate risk of blacklisting here](https://sendgrid.com/blog/avoiding-email-blacklists/). From 6dc90d5717dbe253c4d70313cebfab51959960d4 Mon Sep 17 00:00:00 2001 From: mbernier Date: Tue, 7 Jun 2016 17:10:08 -0600 Subject: [PATCH 5/9] added plugins for bootstrap rows and columns --- plugins/bootstrap_column.rb | 43 ++++++++++++++++++++++++ plugins/bootstrap_row.rb | 67 +++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 plugins/bootstrap_column.rb create mode 100644 plugins/bootstrap_row.rb diff --git a/plugins/bootstrap_column.rb b/plugins/bootstrap_column.rb new file mode 100644 index 0000000000..8a3ba6ae24 --- /dev/null +++ b/plugins/bootstrap_column.rb @@ -0,0 +1,43 @@ +# +# Author: Matt Bernier +# Make a bootstrap column +# +# Outputs the HTML for a bootstrap column of size 4 with id "best_column" +# + # {% html_column md-4 best_column %} + # Some content + # {% endhtml_column %} +# ... + #
    + #

    Some content

    + #
    +# +module Jekyll + + class Bootstrap_Column < Liquid::Block + + def initialize(tag_name, markup, tokens) + parameters = markup.shellsplit + + @size = "col-#{parameters[0]}" + + @class = defined?(parameters[1]) ? " #{parameters[1]}" : "" + + @id = defined?(parameters[2]) ? "id=\"#{parameters[0]}\"" : "" + + super + end + def render(context) + output = super +output = < + #{output} + +HTML + + #html = Kramdown::Document.new(output).to_html + return Liquid::Template.parse(output).render context + end + end +end + Liquid::Template.register_tag('html_row', Jekyll::Bootstrap_Column) diff --git a/plugins/bootstrap_row.rb b/plugins/bootstrap_row.rb new file mode 100644 index 0000000000..8f7f3d0159 --- /dev/null +++ b/plugins/bootstrap_row.rb @@ -0,0 +1,67 @@ +# +# Author: Matt Bernier +# Make a bootstrap row +# +# Outputs the HTML for a bootstrap row with id "best_row" +# +# {% html_row md-4 best_row %} +# Wheeee! +# {% endhtml_row %} +# ... +#
    +# Wheeee! +#
    +# +# Use with html_column to output a proper bootstrap row and column pairing +# +# {% html_row md-4 best_row %} +# {% html_column md-4 best_column %} +# Some content +# {% endhtml_column %} +# {% html_column md-4 best_column2 %} +# Some content +# {% endhtml_column %} +# {% html_column md-4 best_column3 %} +# Some content +# {% endhtml_column %} +# {% endhtml_row %} +# ... +#
    +#
    +#

    Some content

    +#
    +#
    +#

    Some content

    +#
    +#
    +#

    Some content

    +#
    +#
    +# +module Jekyll + + class Bootstrap_Row < Liquid::Block + + def initialize(tag_name, markup, tokens) + parameters = markup.shellsplit + + @class = defined?(parameters[0]) ? " #{parameters[1]}" : "" + + @id = defined?(parameters[1]) ? "id=\"#{parameters[0]}\"" : "" + + super + end + def render(context) + output = super +output = < + #{output} + +HTML + + #html = Kramdown::Document.new(output).to_html + return Liquid::Template.parse(output).render context + end + end +end + Liquid::Template.register_tag('html_row', Jekyll::Bootstrap_Row) From 80506391fb6af3d18347fcb28f823f41d2dba8e5 Mon Sep 17 00:00:00 2001 From: mbernier Date: Tue, 7 Jun 2016 17:41:43 -0600 Subject: [PATCH 6/9] Updated to work properly --- plugins/bootstrap_column.rb | 21 +++++++++++++-------- plugins/bootstrap_row.rb | 4 +--- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/plugins/bootstrap_column.rb b/plugins/bootstrap_column.rb index 8a3ba6ae24..df85dfeec0 100644 --- a/plugins/bootstrap_column.rb +++ b/plugins/bootstrap_column.rb @@ -8,9 +8,9 @@ # Some content # {% endhtml_column %} # ... - #
    - #

    Some content

    - #
    +#
    +#

    Some content

    +#
    # module Jekyll @@ -23,16 +23,21 @@ def initialize(tag_name, markup, tokens) @class = defined?(parameters[1]) ? " #{parameters[1]}" : "" - @id = defined?(parameters[2]) ? "id=\"#{parameters[0]}\"" : "" + @id = parameters[2]; + + if defined?(parameters[2].to_str) + if !empty?(parameters[2].to_str) + @id = "id=\"#{parameters[2]}\"" + end + end + super end def render(context) output = super output = < - #{output} - +

    #{output}

    HTML #html = Kramdown::Document.new(output).to_html @@ -40,4 +45,4 @@ def render(context) end end end - Liquid::Template.register_tag('html_row', Jekyll::Bootstrap_Column) + Liquid::Template.register_tag('html_column', Jekyll::Bootstrap_Column) diff --git a/plugins/bootstrap_row.rb b/plugins/bootstrap_row.rb index 8f7f3d0159..dcf603484e 100644 --- a/plugins/bootstrap_row.rb +++ b/plugins/bootstrap_row.rb @@ -54,9 +54,7 @@ def initialize(tag_name, markup, tokens) def render(context) output = super output = < - #{output} - +
    #{output}
    HTML #html = Kramdown::Document.new(output).to_html From e59549650cc2ef0407a1625512338948687342b9 Mon Sep 17 00:00:00 2001 From: mbernier Date: Tue, 7 Jun 2016 17:44:50 -0600 Subject: [PATCH 7/9] Added a no-paragraph version of the columns --- plugins/boostrap_column_nop.rb | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 plugins/boostrap_column_nop.rb diff --git a/plugins/boostrap_column_nop.rb b/plugins/boostrap_column_nop.rb new file mode 100644 index 0000000000..b3ebd7e2d1 --- /dev/null +++ b/plugins/boostrap_column_nop.rb @@ -0,0 +1,48 @@ +# +# Author: Matt Bernier +# Make a bootstrap column +# +# Outputs the HTML for a bootstrap column of size 4 with id "best_column" +# + # {% html_column md-4 best_column %} + # Some content + # {% endhtml_column %} +# ... +#
    +#

    Some content

    +#
    +# +module Jekyll + + class Bootstrap_Column_Nop < Liquid::Block + + def initialize(tag_name, markup, tokens) + parameters = markup.shellsplit + + @size = "col-#{parameters[0]}" + + @class = defined?(parameters[1]) ? " #{parameters[1]}" : "" + + @id = parameters[2]; + + if defined?(parameters[2].to_str) + if !empty?(parameters[2].to_str) + @id = "id=\"#{parameters[2]}\"" + end + end + + + super + end + def render(context) + output = super +output = <#{output} +HTML + + #html = Kramdown::Document.new(output).to_html + return Liquid::Template.parse(output).render context + end + end +end + Liquid::Template.register_tag('html_column_nop', Jekyll::Bootstrap_Column_Nop) From c61349403f566fc37a7f80413d2d0be630c69cbf Mon Sep 17 00:00:00 2001 From: Cody Clark Date: Wed, 8 Jun 2016 09:07:35 -0600 Subject: [PATCH 8/9] Added missing entry to the ToC Hello! I have some feedback regarding your documentation: The table of contents at the top of Web API V3 Contacts API page (URL pasted below) is missing an entry for "Get the Lists the Recipient Is On". The missing entry should be inserted into the "Recipients" section after the "Delete a single Recipient" entry. The missing entry HREF is https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html#Get-the-Lists-the-Recipient-Is-On-GET. Page URL: https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html --- .../Web_API_v3/Marketing_Campaigns/contactdb.apiblueprint | 1 + 1 file changed, 1 insertion(+) diff --git a/source/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.apiblueprint b/source/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.apiblueprint index 0a2468aae5..89ac51aea2 100644 --- a/source/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.apiblueprint +++ b/source/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.apiblueprint @@ -46,6 +46,7 @@ Recipients
  • List Recipients - GET
  • Retrieve a Recipient - GET
  • Delete a single Recipient - DELETE
  • +
  • Get the Lists the Recipient is On - GET
  • Get Count of Billable Recipients - GET
  • Get Count of Recipients - GET
  • Get Recipients Matching Search Criteria - GET
  • From 0e0d589d33eae25d6e0ea441f67c197c0e125257 Mon Sep 17 00:00:00 2001 From: Eric Schallock Date: Wed, 8 Jun 2016 10:02:21 -0600 Subject: [PATCH 9/9] added temporary fix for bad URLs to Classroom in param table --- source/API_Reference/Web_API_v3/Mail/index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/API_Reference/Web_API_v3/Mail/index.html b/source/API_Reference/Web_API_v3/Mail/index.html index 490d28bf9d..9e595f881d 100644 --- a/source/API_Reference/Web_API_v3/Mail/index.html +++ b/source/API_Reference/Web_API_v3/Mail/index.html @@ -103,7 +103,7 @@ Every request made to /v3/mail/send/beta will require a request body formatted in JSON containing your email’s content and metadata. This may include information such as the recipient’s email address, the return address, and the subject. {% api_table %} - {% api_table_param personalizations "array of objects" Yes "Min 1, Max 100" "An array of messages and their metadata. Each object within personalizations can be thought of as an envelope - it defines who should receive an individual message and how that message should be handled. For more information, please see our documentation on Personalizations. Parameters in personalizations will override the parameters of the same name from the message level." 0 %} + {% api_table_param personalizations "array of objects" Yes "Min 1, Max 100" "An array of messages and their metadata. Each object within personalizations can be thought of as an envelope - it defines who should receive an individual message and how that message should be handled. For more information, please see our documentation on Personalizations. Parameters in personalizations will override the parameters of the same name from the message level." 0 %} {% api_table_param to "array of email objects" Yes "Min 1" "An array of recipients. Each email object within this array may contain the recipient’s name, but must always contain the recipient’s email." 1 %} {% api_table_param email string Yes "" "The email address of the recipient." 2 %} {% api_table_param name string No "" "The name of the recipient." 2 %} @@ -140,10 +140,10 @@ {% api_table_param categories "array of strings" No "Max 255" "An array of category names for this message. Each category name may not exceed 255 characters. You cannot have more than 10 categories per request." 0 %} {% api_table_param custom_args "custom object" No "" "Values that are specific to the entire send that will be carried along with the email and its activity data. Substitutions will not be made on custom arguments, so any string that is entered into this parameter will be assumed to be the custom argument that you would like to be used. This parameter is overridden by any conflicting personalizations[x].custom_args if that parameter has been defined. If personalizations[x].custom_args has been defined but does not conflict with the values defined within this parameter, the two will be merged. The combined total size of these custom arguments may not exceed 10,000 bytes." 0 %} {% api_table_param send_at integer No "" "A unix timestamp allowing you to specify when you want your email to be sent from SendGrid. This is not necessary if you want the email to be sent at the time of your API request." 0 %} - {% api_table_param batch_id string No "" "This ID represents a batch of emails (AKA multiple sends of the same email) to be associated to each other for scheduling. Including a batch_id in your request allows you to include this email in that batch, and also enables you to cancel or pause the delivery of that entire batch. For more information, please read about Cancel Scheduled Sends." 0 %} + {% api_table_param batch_id string No "" "This ID represents a batch of emails (AKA multiple sends of the same email) to be associated to each other for scheduling. Including a batch_id in your request allows you to include this email in that batch, and also enables you to cancel or pause the delivery of that entire batch. For more information, please read about Cancel Scheduled Sends." 0 %} {% api_table_param asm "object" No "" "An object allowing you to specify how to handle unsubscribes." 0 %} {% api_table_param group_id integer Yes "" "The unsubscribe group to associate with this email." 1 %} - {% api_table_param groups_to_display "array of integers" No "Max 25" "An array containing the unsubscribe groups that you would like to be displayed on the unsubscribe preferences page." 1 %} + {% api_table_param groups_to_display "array of integers" No "Max 25" "An array containing the unsubscribe groups that you would like to be displayed on the unsubscribe preferences page." 1 %} {% api_table_param ip_pool_name string No "Min 2, Max 64" "The IP Pool that you would like to send this email from." 0 %} {% api_table_param mail_settings "object" No "" "A collection of different mail settings that you can use to specify how you would like this email to be handled." 0 %} {% api_table_param bcc "object" No "" "This allows you to have a blind carbon copy automatically sent to the specified email address for every email that is sent." 1 %} @@ -155,7 +155,7 @@ {% api_table_param enable boolean No "true or false" "Indicates if this setting is enabled." 2 %} {% api_table_param text string No "" "The plain text content of your footer." 2 %} {% api_table_param html string No "" "The HTML content of your footer." 2 %} - {% api_table_param sandbox_mode object No "" "This allows you to send a test email to ensure that your request body is valid and formatted correctly. For more information, please see our Classroom." 1 %} + {% api_table_param sandbox_mode object No "" "This allows you to send a test email to ensure that your request body is valid and formatted correctly. For more information, please see our Classroom." 1 %} {% api_table_param enable boolean No "true or false" "Indicates if this setting is enabled." 2 %} {% api_table_param spam_check object No "" "This allows you to test the content of your email for spam." 1 %} {% api_table_param enable boolean No "true or false" "Indicates if this setting is enabled." 2 %}