"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[9917],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var o=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,a=function(e,t){if(null==e)return{};var r,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)r=n[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=o.createContext({}),c=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=c(r),f=a,b=u["".concat(s,".").concat(f)]||u[f]||m[f]||n;return r?o.createElement(b,l(l({ref:t},p),{},{components:r})):o.createElement(b,l({ref:t},p))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,l=new Array(n);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:a,l[1]=i;for(var c=2;c<n;c++)l[c]=r[c];return o.createElement.apply(null,l)}return o.createElement.apply(null,r)}f.displayName="MDXCreateElement"},36621:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var o=r(87462),a=(r(67294),r(3905));const n={layout:"post",title:"ASF Mailing List Problems (Update: we are back to normal)",slug:"asf_mailing_list_problems"},l=void 0,i={permalink:"/blog/asf_mailing_list_problems",editUrl:"https://github.com/apache/cloudstack-www/tree/main/blog/2014-05-08-asf_mailing_list_problems.md",source:"@site/blog/2014-05-08-asf_mailing_list_problems.md",title:"ASF Mailing List Problems (Update: we are back to normal)",description:"Update: The email infrastructure is back to normal, although it may take some time for the queued messages to completely flush out of the backlog. See the linked post from the ASF infrastructure team below for more details.",date:"2014-05-08T00:00:00.000Z",formattedDate:"May 8, 2014",tags:[],hasTruncateMarker:!1,authors:[],frontMatter:{layout:"post",title:"ASF Mailing List Problems (Update: we are back to normal)",slug:"asf_mailing_list_problems"},prevItem:{title:"Realhostip Reprieve for CloudStack Users",permalink:"/blog/realhostip_reprieve"},nextItem:{title:"How to Mitigate OpenSSL HeartBleed Vulnerability in Apache CloudStack",permalink:"/blog/how_to_mitigate_openssl_heartbleed"}},s={authorsImageUrls:[]},c=[],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("strong",null,"Update:")," The email infrastructure is back to normal, although it may take some time for the queued messages to completely flush out of the backlog. See the linked post from the ASF infrastructure team below for more details."),(0,a.kt)("p",null,"There are ongoing problems with the ASF's email infrastructure that mean no mail delivery is happening for our project's lists.  Please check the ",(0,a.kt)("a",{href:"https://blogs.apache.org/infra/entry/mail_outage"},"official ASF infrastructure blog post")," and ",(0,a.kt)("a",{href:"https://twitter.com/infrabot"},"twitter feed")," for updates."))}m.isMDXComponent=!0}}]);