<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>KingPenguinMan</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://128374.xyz/</id>
  <link href="https://128374.xyz/" rel="alternate"/>
  <link href="https://128374.xyz/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, KingPenguinMan</rights>
  <subtitle>Try to be not perfect</subtitle>
  <title>PenguinMan</title>
  <updated>2026-06-03T13:51:31.590Z</updated>
  <entry>
    <author>
      <name>KingPenguinMan</name>
    </author>
    <category term="bug" scheme="https://128374.xyz/categories/bug/"/>
    <category term="Thunderbird" scheme="https://128374.xyz/tags/Thunderbird/"/>
    <category term="Outlook" scheme="https://128374.xyz/tags/Outlook/"/>
    <category term="OAuth2" scheme="https://128374.xyz/tags/OAuth2/"/>
    <category term="IMAP" scheme="https://128374.xyz/tags/IMAP/"/>
    <category term="Windows" scheme="https://128374.xyz/tags/Windows/"/>
    <content>
      <![CDATA[<h2 id="问题现象"><a href="#问题现象" class="headerlink" title="问题现象"></a>问题现象</h2><p>在 Thunderbird 中添加 Outlook 邮箱时，流程看起来很矛盾：</p><ol><li><p>Thunderbird 能正常跳转到 Microsoft 登录页面。</p></li><li><p>Microsoft 账号也发来了安全通知邮件，提示：</p><blockquote><p>Thunderbird 已连接到 Microsoft 账户。</p></blockquote></li><li><p>但是回到 Thunderbird 后，仍然提示：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">身份验证出错。<br>无法登录到服务器。可能是配置、用户名或者密码错误。<br></code></pre></td></tr></table></figure></li></ol><p>也就是说，Microsoft 侧已经确认“授权成功”，但 Thunderbird 侧依旧无法通过 IMAP 登录邮箱。</p><p>这类问题最容易误判成密码错误、IMAP 没打开、服务器地址填错，但这次真正的问题并不在这些地方。</p><h2 id="环境"><a href="#环境" class="headerlink" title="环境"></a>环境</h2><p>本次环境如下：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs text">系统：Windows<br>客户端：Mozilla Thunderbird 151.0.1<br>邮箱：Outlook.com<br>收件协议：IMAP<br>发件协议：SMTP<br>认证方式：OAuth2<br></code></pre></td></tr></table></figure><p>Outlook 网页版中的设置已经确认打开：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">设置 -&gt; 邮件 -&gt; 转发和 IMAP -&gt; 允许设备和应用使用 IMAP<br></code></pre></td></tr></table></figure><p>网络连通性也正常：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Test-NetConnection</span> outlook.office365.com <span class="hljs-literal">-Port</span> <span class="hljs-number">993</span><br><span class="hljs-built_in">Test-NetConnection</span> smtp.office365.com <span class="hljs-literal">-Port</span> <span class="hljs-number">587</span><br><span class="hljs-built_in">Test-NetConnection</span> login.microsoftonline.com <span class="hljs-literal">-Port</span> <span class="hljs-number">443</span><br></code></pre></td></tr></table></figure><p>结果均为 <code>TcpOpen: True</code>。</p><h2 id="正确的服务器配置"><a href="#正确的服务器配置" class="headerlink" title="正确的服务器配置"></a>正确的服务器配置</h2><p>Thunderbird 中 Outlook 邮箱的基础配置应该是：</p><h3 id="IMAP-收件服务器"><a href="#IMAP-收件服务器" class="headerlink" title="IMAP 收件服务器"></a>IMAP 收件服务器</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs text">服务器：outlook.office365.com<br>端口：993<br>连接安全性：SSL/TLS<br>认证方式：OAuth2<br>用户名：完整 Outlook 邮箱地址<br></code></pre></td></tr></table></figure><h3 id="SMTP-发件服务器"><a href="#SMTP-发件服务器" class="headerlink" title="SMTP 发件服务器"></a>SMTP 发件服务器</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs text">服务器：smtp.office365.com<br>端口：587<br>连接安全性：STARTTLS<br>认证方式：OAuth2<br>用户名：完整 Outlook 邮箱地址<br></code></pre></td></tr></table></figure><p>也可以见到有人使用：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">smtp-mail.outlook.com<br></code></pre></td></tr></table></figure><p>但在 Thunderbird 的 OAuth2 场景下，<code>smtp.office365.com</code> 通常更稳。</p><h2 id="排查过程"><a href="#排查过程" class="headerlink" title="排查过程"></a>排查过程</h2><h3 id="1-排除-IMAP-开关问题"><a href="#1-排除-IMAP-开关问题" class="headerlink" title="1. 排除 IMAP 开关问题"></a>1. 排除 IMAP 开关问题</h3><p>首先检查 Outlook 网页版：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">设置 -&gt; 邮件 -&gt; 转发和 IMAP<br></code></pre></td></tr></table></figure><p>确认：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">允许设备和应用使用 IMAP：已开启<br></code></pre></td></tr></table></figure><p>这说明 Outlook 允许第三方客户端使用 IMAP。</p><h3 id="2-排除网络问题"><a href="#2-排除网络问题" class="headerlink" title="2. 排除网络问题"></a>2. 排除网络问题</h3><p>本机测试端口：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Test-NetConnection</span> outlook.office365.com <span class="hljs-literal">-Port</span> <span class="hljs-number">993</span><br><span class="hljs-built_in">Test-NetConnection</span> smtp.office365.com <span class="hljs-literal">-Port</span> <span class="hljs-number">587</span><br><span class="hljs-built_in">Test-NetConnection</span> login.microsoftonline.com <span class="hljs-literal">-Port</span> <span class="hljs-number">443</span><br></code></pre></td></tr></table></figure><p>结果都能连通，所以不是网络、防火墙、代理导致的连接失败。</p><h3 id="3-排除密码问题"><a href="#3-排除密码问题" class="headerlink" title="3. 排除密码问题"></a>3. 排除密码问题</h3><p>如果是普通密码错误，Microsoft 一般不会发来“新应用有权访问你的数据”的通知。</p><p>这次 Microsoft 已经明确发信说明 Thunderbird 连上了 Microsoft 账户，所以至少 OAuth 登录流程已经跑通。</p><p>因此问题不是“账号密码没通过”，而是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">Microsoft 授权成功后，Thunderbird 拿到的 token 无法被 IMAP 服务接受。<br></code></pre></td></tr></table></figure><h3 id="4-排除-Thunderbird-自动配置错误"><a href="#4-排除-Thunderbird-自动配置错误" class="headerlink" title="4. 排除 Thunderbird 自动配置错误"></a>4. 排除 Thunderbird 自动配置错误</h3><p>Thunderbird 自动生成过一组错误配置：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">IMAP 端口：997<br>SMTP 主机：.outlook.com<br></code></pre></td></tr></table></figure><p>这明显不对。</p><p>后来手动修正为：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">IMAP: outlook.office365.com:993 SSL/TLS OAuth2<br>SMTP: smtp.office365.com:587 STARTTLS OAuth2<br></code></pre></td></tr></table></figure><p>但修完后仍然失败，说明服务器地址虽然必须正确，但还不是最终根因。</p><h3 id="5-清理旧授权缓存"><a href="#5-清理旧授权缓存" class="headerlink" title="5. 清理旧授权缓存"></a>5. 清理旧授权缓存</h3><p>Thunderbird 的 OAuth token 存在配置目录下的登录缓存中，例如：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">logins.json<br>cookies.sqlite<br></code></pre></td></tr></table></figure><p>曾经失败过的 Microsoft OAuth 登录状态可能会被继续复用。</p><p>因此清理了 Microsoft 相关缓存：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs text">oauth://login.microsoftonline.com<br>login.microsoftonline.com<br>outlook.office.com<br>office365<br></code></pre></td></tr></table></figure><p>清理后重新授权，依旧失败。</p><p>这说明问题已经不是旧缓存，而是 Thunderbird 请求 OAuth 权限时的 scope 本身有问题。</p><h2 id="真正原因：OAuth-scope-过宽"><a href="#真正原因：OAuth-scope-过宽" class="headerlink" title="真正原因：OAuth scope 过宽"></a>真正原因：OAuth scope 过宽</h2><p>OAuth2 不是简单的“登录成功就能访问所有东西”。</p><p>它的授权过程会带上一组权限范围，也就是 <code>scope</code>。</p><p>Thunderbird 请求 Microsoft 邮箱权限时，可能会带上类似这样的 scope：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs text">https://outlook.office.com/IMAP.AccessAsUser.All<br>https://outlook.office.com/POP.AccessAsUser.All<br>https://outlook.office.com/SMTP.Send<br>offline_access<br></code></pre></td></tr></table></figure><p>这里的问题是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">POP.AccessAsUser.All<br></code></pre></td></tr></table></figure><p>虽然用户实际使用的是 IMAP，但 Thunderbird 可能把 POP 权限也一起请求了。</p><p>Outlook.com 最近对第三方客户端 OAuth scope 比较敏感，于是出现了这种割裂现象：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">Microsoft 账号层面：授权成功<br>Outlook IMAP 服务层面：token 不被接受<br>Thunderbird 表现：身份验证失败<br></code></pre></td></tr></table></figure><p>也就是说，失败不是因为“没有授权”，而是因为“授权 token 的权限组合不合适”。</p><h2 id="最终修复"><a href="#最终修复" class="headerlink" title="最终修复"></a>最终修复</h2><p>最终修复方式是给 Thunderbird 的 Outlook 账号显式指定 OAuth scope，只请求真正需要的权限。</p><p>正确 scope：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">https://outlook.office.com/IMAP.AccessAsUser.All<br>https://outlook.office.com/SMTP.Send<br>offline_access<br></code></pre></td></tr></table></figure><p>不要带：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">https://outlook.office.com/POP.AccessAsUser.All<br></code></pre></td></tr></table></figure><p>对应到 Thunderbird 的 <code>prefs.js</code>，关键配置类似这样：</p><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs js"><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.authMethod&quot;</span>, <span class="hljs-number">10</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.hostname&quot;</span>, <span class="hljs-string">&quot;outlook.office365.com&quot;</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.port&quot;</span>, <span class="hljs-number">993</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.socketType&quot;</span>, <span class="hljs-number">3</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.type&quot;</span>, <span class="hljs-string">&quot;imap&quot;</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.userName&quot;</span>, <span class="hljs-string">&quot;your-name@outlook.com&quot;</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.server.server12.oauth2.scope&quot;</span>, <span class="hljs-string">&quot;https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access&quot;</span>);<br><br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.smtpserver.smtp4.authMethod&quot;</span>, <span class="hljs-number">10</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.smtpserver.smtp4.hostname&quot;</span>, <span class="hljs-string">&quot;smtp.office365.com&quot;</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.smtpserver.smtp4.port&quot;</span>, <span class="hljs-number">587</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.smtpserver.smtp4.try_ssl&quot;</span>, <span class="hljs-number">2</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.smtpserver.smtp4.username&quot;</span>, <span class="hljs-string">&quot;your-name@outlook.com&quot;</span>);<br><span class="hljs-title function_">user_pref</span>(<span class="hljs-string">&quot;mail.smtpserver.smtp4.oauth2.scope&quot;</span>, <span class="hljs-string">&quot;https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access&quot;</span>);<br></code></pre></td></tr></table></figure><p>其中：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">authMethod = 10<br></code></pre></td></tr></table></figure><p>表示 OAuth2。</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">socketType = 3<br></code></pre></td></tr></table></figure><p>表示 SSL&#x2F;TLS。</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">try_ssl = 2<br></code></pre></td></tr></table></figure><p>表示 STARTTLS。</p><h2 id="修复后的操作顺序"><a href="#修复后的操作顺序" class="headerlink" title="修复后的操作顺序"></a>修复后的操作顺序</h2><p>推荐顺序如下：</p><h3 id="1-关闭-Thunderbird"><a href="#1-关闭-Thunderbird" class="headerlink" title="1. 关闭 Thunderbird"></a>1. 关闭 Thunderbird</h3><p>确保 Thunderbird 没有后台进程。</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Get-Process</span> <span class="hljs-literal">-Name</span> thunderbird <span class="hljs-literal">-ErrorAction</span> SilentlyContinue | <span class="hljs-built_in">Stop-Process</span> <span class="hljs-literal">-Force</span><br></code></pre></td></tr></table></figure><h3 id="2-备份配置"><a href="#2-备份配置" class="headerlink" title="2. 备份配置"></a>2. 备份配置</h3><p>配置文件一般在：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">C:\Users\&lt;用户名&gt;\AppData\Roaming\Thunderbird\Profiles\&lt;profile&gt;\prefs.js<br></code></pre></td></tr></table></figure><p>先备份：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs powershell"><span class="hljs-built_in">Copy-Item</span> prefs.js prefs<span class="hljs-literal">-before-outlook-fix</span>.js<br></code></pre></td></tr></table></figure><h3 id="3-修正服务器配置"><a href="#3-修正服务器配置" class="headerlink" title="3. 修正服务器配置"></a>3. 修正服务器配置</h3><p>确保 IMAP 和 SMTP 都是 OAuth2。</p><h3 id="4-写入最小-OAuth-scope"><a href="#4-写入最小-OAuth-scope" class="headerlink" title="4. 写入最小 OAuth scope"></a>4. 写入最小 OAuth scope</h3><p>只保留：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">IMAP.AccessAsUser.All<br>SMTP.Send<br>offline_access<br></code></pre></td></tr></table></figure><h3 id="5-清理-Microsoft-旧-token"><a href="#5-清理-Microsoft-旧-token" class="headerlink" title="5. 清理 Microsoft 旧 token"></a>5. 清理 Microsoft 旧 token</h3><p>删除 Thunderbird 中 Microsoft 相关登录缓存，让它重新授权。</p><p>缓存通常位于：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">logins.json<br>cookies.sqlite<br></code></pre></td></tr></table></figure><p>注意：如果还有 Gmail、QQ 邮箱，不要粗暴删除全部密码记录，否则其它邮箱也要重新登录。</p><h3 id="6-重启-Thunderbird"><a href="#6-重启-Thunderbird" class="headerlink" title="6. 重启 Thunderbird"></a>6. 重启 Thunderbird</h3><p>重新触发 Microsoft 登录授权。</p><p>授权完成后，IMAP 就可以正常同步 Outlook 邮箱。</p><h2 id="为什么-Outlook-网页端开了-IMAP-仍然失败"><a href="#为什么-Outlook-网页端开了-IMAP-仍然失败" class="headerlink" title="为什么 Outlook 网页端开了 IMAP 仍然失败"></a>为什么 Outlook 网页端开了 IMAP 仍然失败</h2><p>Outlook 网页端的 IMAP 开关只表示：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">允许第三方客户端使用 IMAP 协议<br></code></pre></td></tr></table></figure><p>但 OAuth2 还多了一层：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">客户端拿到的 token 是否拥有正确的权限范围<br></code></pre></td></tr></table></figure><p>这两个条件都要满足：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs text">IMAP 开关打开<br>OAuth token scope 正确<br></code></pre></td></tr></table></figure><p>只满足第一个不够。</p><p>这就是为什么网页端明明开了 IMAP，Microsoft 也发了授权成功邮件，但 Thunderbird 还是失败。</p><h2 id="经验总结"><a href="#经验总结" class="headerlink" title="经验总结"></a>经验总结</h2><p>这次问题的判断关键是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">Microsoft 已发授权成功邮件，但 Thunderbird 仍认证失败。<br></code></pre></td></tr></table></figure><p>这说明问题不在密码，也不在普通连接配置，而在 OAuth token 的使用阶段。</p><p>最终结论：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">Thunderbird 添加 Outlook 邮箱时，如果授权成功但 IMAP 登录失败，可以检查 OAuth scope 是否包含 POP 权限。<br></code></pre></td></tr></table></figure><p>最稳的 scope 是：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs text">https://outlook.office.com/IMAP.AccessAsUser.All<br>https://outlook.office.com/SMTP.Send<br>offline_access<br></code></pre></td></tr></table></figure><p>简单说：</p><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">只申请要用的权限，不要让 Thunderbird 顺手申请 POP。<br></code></pre></td></tr></table></figure><p>权限越干净，Outlook 越容易接受。</p><h2 id="最终配置速查"><a href="#最终配置速查" class="headerlink" title="最终配置速查"></a>最终配置速查</h2><h3 id="收件"><a href="#收件" class="headerlink" title="收件"></a>收件</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs text">协议：IMAP<br>服务器：outlook.office365.com<br>端口：993<br>安全性：SSL/TLS<br>认证：OAuth2<br></code></pre></td></tr></table></figure><h3 id="发件"><a href="#发件" class="headerlink" title="发件"></a>发件</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs text">协议：SMTP<br>服务器：smtp.office365.com<br>端口：587<br>安全性：STARTTLS<br>认证：OAuth2<br></code></pre></td></tr></table></figure><h3 id="OAuth-scope"><a href="#OAuth-scope" class="headerlink" title="OAuth scope"></a>OAuth scope</h3><figure class="highlight text"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs text">https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access<br></code></pre></td></tr></table></figure><h2 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h2><p>这类问题表面上是“身份验证失败”，实际上是 OAuth 授权细节问题。</p><p>Thunderbird 能弹出 Microsoft 登录窗口、Microsoft 能发授权成功邮件，只能说明第一阶段登录成功；真正收信时，Outlook IMAP 服务还会检查 token 的权限范围。</p><p>当 Thunderbird 请求了多余的 POP 权限后，Outlook 可能会接受授权，但拒绝后续 IMAP 登录。</p><p>最终通过精简 OAuth scope，让 token 只包含 IMAP、SMTP 和离线访问权限，问题解决。</p>]]>
    </content>
    <id>https://128374.xyz/2026/06/03/Thunderbird-Outlook-OAuth-IMAP-auth-failed/</id>
    <link href="https://128374.xyz/2026/06/03/Thunderbird-Outlook-OAuth-IMAP-auth-failed/"/>
    <published>2026-06-03T13:20:00.000Z</published>
    <summary>记录一次 Outlook 邮箱在 Thunderbird 中“微软已授权，但 IMAP 身份验证失败”的完整排查过程，最终通过修正 OAuth scope 解决。</summary>
    <title>Thunderbird 添加 Outlook 邮箱授权成功却登录失败的完整排查与修复</title>
    <updated>2026-06-03T13:51:31.590Z</updated>
  </entry>
  <entry>
    <author>
      <name>KingPenguinMan</name>
    </author>
    <category term="python" scheme="https://128374.xyz/categories/python/"/>
    <category term="Python" scheme="https://128374.xyz/tags/Python/"/>
    <content>
      <![CDATA[<h2 id="1-print"><a href="#1-print" class="headerlink" title="1.print"></a>1.print</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-comment">#!/bin/python3</span><br><span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;Hello world&quot;</span>);<br><span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;&quot;&quot;This string runs</span><br><span class="hljs-string"> mutiple lines&quot;&quot;&quot;</span>); <span class="hljs-comment">#triple quote allows mutiple type</span><br><span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;This string is&quot;</span> + <span class="hljs-string">&quot; awesome&quot;</span>);<br><span class="hljs-built_in">print</span>(<span class="hljs-string">&#x27;\n&#x27;</span>); <br><span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;New line&quot;</span>);<br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>https://128374.xyz/2026/04/08/%E7%AC%94%E8%AE%B0/Python/Basic/</id>
    <link href="https://128374.xyz/2026/04/08/%E7%AC%94%E8%AE%B0/Python/Basic/"/>
    <published>2026-04-08T08:06:27.000Z</published>
    <summary>Python基本语法学习</summary>
    <title>Basic</title>
    <updated>2026-06-03T13:51:31.591Z</updated>
  </entry>
  <entry>
    <author>
      <name>KingPenguinMan</name>
    </author>
    <category term="kali" scheme="https://128374.xyz/categories/kali/"/>
    <category term="kali" scheme="https://128374.xyz/tags/kali/"/>
    <content>
      <![CDATA[<figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs shell">┌──(penguin㉿kali)-[~/Documents]<br>└─$ cat ip.txt | grep &quot;64 bytes&quot;<br><br>64 bytes from 192.168.227.1: icmp_seq=1 ttl=128 time=0.327 ms<br>  <br>┌──(penguin㉿kali)-[~/Documents]<br>└─$ cat ip.txt | grep &quot;64 bytes&quot;| cut -d &quot; &quot; -f 4 | tr -d &quot;:&quot; <br>192.168.227.1<br><br></code></pre></td></tr></table></figure><p>ipsweep.sh</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-meta">#!/bin/bash    声明bash脚本</span><br><br><span class="hljs-keyword">if</span> [ <span class="hljs-string">&quot;<span class="hljs-variable">$1</span>&quot;</span> == <span class="hljs-string">&quot;&quot;</span> ]<br><span class="hljs-keyword">then</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;Forget an IP Address&quot;</span><br><span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;Syntax ./ipsweep.sh 192.168.227&quot;</span><br><br><span class="hljs-keyword">else</span><br><span class="hljs-keyword">for</span> ip <span class="hljs-keyword">in</span> `<span class="hljs-built_in">seq</span> 1 254` ; <span class="hljs-keyword">do</span><br>ping -c 1 <span class="hljs-variable">$1</span>.<span class="hljs-variable">$ip</span> | grep <span class="hljs-string">&quot;64 bytes&quot;</span>| <span class="hljs-built_in">cut</span> -d <span class="hljs-string">&quot; &quot;</span> -f 4 | <span class="hljs-built_in">tr</span> -d <span class="hljs-string">&quot;:&quot;</span> &amp;<br><span class="hljs-keyword">done</span><br><span class="hljs-keyword">fi</span><br></code></pre></td></tr></table></figure><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">运行 ./ipsweep.sh 192.168.227<br></code></pre></td></tr></table></figure><p>自动化</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash"> ./ipsweep.sh 192.168.227 &gt;ips.txt<br><br><span class="hljs-keyword">for</span> ip <span class="hljs-keyword">in</span> (<span class="hljs-built_in">cat</span> ips.txt) ; <span class="hljs-keyword">do</span> nmap <span class="hljs-variable">$ip</span> ; <span class="hljs-keyword">done</span>  <br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>https://128374.xyz/2026/04/08/%E7%AC%94%E8%AE%B0/ping%20sweeper/</id>
    <link href="https://128374.xyz/2026/04/08/%E7%AC%94%E8%AE%B0/ping%20sweeper/"/>
    <published>2026-04-08T08:06:10.000Z</published>
    <summary>简单ip扫描器</summary>
    <title>ping sweeper</title>
    <updated>2026-06-03T13:51:31.591Z</updated>
  </entry>
  <entry>
    <author>
      <name>KingPenguinMan</name>
    </author>
    <category term="kali" scheme="https://128374.xyz/categories/kali/"/>
    <category term="kali" scheme="https://128374.xyz/tags/kali/"/>
    <content>
      <![CDATA[<h3 id="1-查看本机网络信息"><a href="#1-查看本机网络信息" class="headerlink" title="1. 查看本机网络信息"></a>1. 查看本机网络信息</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">ip -a    #新方法<br>ifconfig #旧方法<br></code></pre></td></tr></table></figure><h3 id="2-无线连接"><a href="#2-无线连接" class="headerlink" title="2.无线连接"></a>2.无线连接</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">iwconfig<br></code></pre></td></tr></table></figure><h3 id="3-地址解析协议ARP"><a href="#3-地址解析协议ARP" class="headerlink" title="3. 地址解析协议ARP"></a>3. 地址解析协议ARP</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs shell">ip n<br>arp -a<br></code></pre></td></tr></table></figure><h3 id="4-路由表"><a href="#4-路由表" class="headerlink" title="4.路由表"></a>4.路由表</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">ip -r<br></code></pre></td></tr></table></figure><h3 id="5-检测机器在线"><a href="#5-检测机器在线" class="headerlink" title="5.检测机器在线"></a>5.检测机器在线</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs shell">ping<br></code></pre></td></tr></table></figure><h2 id="Starting-and-Stopping-Service"><a href="#Starting-and-Stopping-Service" class="headerlink" title="Starting and Stopping Service"></a>Starting and Stopping Service</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs shell">sudo service apache2 start / stop<br><br>python3 -m http.server 80<br><br>sudo systemctl disable / enable ssh #start a service when startup<br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>https://128374.xyz/2026/04/08/%E7%AC%94%E8%AE%B0/Common%20Network%20Commands/</id>
    <link href="https://128374.xyz/2026/04/08/%E7%AC%94%E8%AE%B0/Common%20Network%20Commands/"/>
    <published>2026-04-08T08:05:55.000Z</published>
    <summary>简单的网络命令</summary>
    <title>Common Network Commands</title>
    <updated>2026-06-03T13:51:31.590Z</updated>
  </entry>
  <entry>
    <author>
      <name>KingPenguinMan</name>
    </author>
    <category term="linux" scheme="https://128374.xyz/categories/linux/"/>
    <category term="linux" scheme="https://128374.xyz/tags/linux/"/>
    <content>
      <![CDATA[<h1 id="常用文件管理命令"><a href="#常用文件管理命令" class="headerlink" title="常用文件管理命令"></a>常用文件管理命令</h1><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs shell">(1) ctrl c: 取消命令，并且换行<br>(2) ctrl u: 清空本行命令<br>(3) tab键：可以补全命令和文件名，如果补全不了快速按两下tab键，可以显示备选选项<br>(4) ls: 列出当前目录下所有文件，蓝色的是文件夹，白色的是普通文件，绿色的是可执行文件<br>(5) pwd: 显示当前路径<br>(6) cd XXX: 进入XXX目录下, cd .. 返回上层目录<br>(7) cp XXX YYY: 将XXX文件复制成YYY，XXX和YYY可以是一个路径，比如../dir_c/a.txt，表示上层目录下的dir_c文件夹下的文件a.txt<br>(8) mkdir XXX: 创建目录XXX<br>(9) rm XXX: 删除普通文件;  rm XXX -r: 删除文件夹<br>(10) mv XXX YYY: 将XXX文件移动到YYY，和cp命令一样，XXX和YYY可以是一个路径；重命名也是用这个命令<br>(11) touch XXX: 创建一个文件<br>(12) cat XXX: 展示文件XXX中的内容<br>(13) 复制文本 windows/Linux下：Ctrl + insert，Mac下：command + c<br>(14) 粘贴文本windows/Linux下：Shift + insert，Mac下：command + v<br></code></pre></td></tr></table></figure><h1 id="文件权限概念"><a href="#文件权限概念" class="headerlink" title="文件权限概念"></a>文件权限概念</h1><p><img src="https://fastly.jsdelivr.net/gh/KingPenguinMan/image-bed/img/20260328103056528.png" alt="image.png"><br><img src="https://www.runoob.com/wp-content/uploads/2014/06/363003_1227493859FdXT.png" alt="image.png"><br>[0]文件类型</p><ul><li>[d]目录 -文件</li><li>[l]链接文件（link file)</li><li>[b]可随机存取设备</li><li>[c]一次性读取设备</li></ul><p>接下来的字符三个一组 “rwx”三个字符组合</p><ul><li>[r]read</li><li>[w]write</li><li>[x]execute</li><li>[-]无权限</li></ul><table><thead><tr><th><strong>权限组合</strong></th><th><strong>数字简写</strong></th><th><strong>常见用途</strong></th></tr></thead><tbody><tr><td><code>rwx------</code></td><td><strong>700</strong></td><td>只有你能看的私密文件</td></tr><tr><td><code>rw-r--r--</code></td><td><strong>644</strong></td><td>常见的网页&#x2F;博客文件权限</td></tr><tr><td><code>rwxr-xr-x</code></td><td><strong>755</strong></td><td>脚本或程序的标准执行权限</td></tr></tbody></table><p>第一组 “文件拥有者可具备的权限”<br>第二组 “加入此群组之账号的权限”<br>第三组 “非本人且没有加入本群组之其他账号的权限”</p><p>第二栏 表示有多少文件名链接到此节点（i-node）<br>第三栏 表示这个文件（目录）的“拥有者账号”<br>第四栏 表示这个文件的所属群组<br>第五栏 表示大小（Bytes）<br>第六栏 为创建日期或修改日期（距离太久就只显示年份）<br>第七栏 这个文件文件名</p><h2 id="更改文件属性"><a href="#更改文件属性" class="headerlink" title="更改文件属性"></a>更改文件属性</h2><h3 id="1、chgrp：更改文件属组"><a href="#1、chgrp：更改文件属组" class="headerlink" title="1、chgrp：更改文件属组"></a>1、chgrp：更改文件属组</h3><h3 id="changegroup"><a href="#changegroup" class="headerlink" title="changegroup"></a>changegroup</h3><p>语法：</p><p>chgrp [-R] 属组名 文件名</p><p>参数选项</p><ul><li>-R：递归更改文件属组，就是在更改某个目录文件的属组时，如果加上 -R 的参数，那么该目录下的所有文件的属组都会更改。</li></ul><p> 组名必须在&#x2F;etc&#x2F;group 存在，否则会报错</p><h3 id="2、chown：更改文件所有者（owner），也可以同时更改文件所属组。changeowner"><a href="#2、chown：更改文件所有者（owner），也可以同时更改文件所属组。changeowner" class="headerlink" title="2、chown：更改文件所有者（owner），也可以同时更改文件所属组。changeowner"></a>2、chown：更改文件所有者（owner），也可以同时更改文件所属组。changeowner</h3><p>语法：</p><p>chown [–R] 所有者 文件名<br>chown [-R] 所有者:属组名 文件名</p><p>进入 &#x2F;root 目录（~）将install.log的拥有者改为bin这个账号：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs shell">[root@www ~] cd ~<br>[root@www ~]# chown bin install.log<br>[root@www ~]# ls -l<br>-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log<br></code></pre></td></tr></table></figure><p>将install.log的拥有者与群组改回为root：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell">[root@www ~]# chown root:root install.log<br>[root@www ~]# ls -l<br>-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log<br></code></pre></td></tr></table></figure><h3 id="3、chmod：更改文件9个属性"><a href="#3、chmod：更改文件9个属性" class="headerlink" title="3、chmod：更改文件9个属性"></a>3、chmod：更改文件9个属性</h3><p>Linux文件属性有两种设置方法，一种是数字，一种是符号。</p><p>Linux 文件的基本权限就有九个，分别是 <strong>owner&#x2F;group&#x2F;others(拥有者&#x2F;组&#x2F;其他)</strong> 三种身份各有自己的 <strong>read&#x2F;write&#x2F;execute</strong> 权限。</p><p>先复习一下刚刚上面提到的数据：文件的权限字符为： -rwxrwxrwx ， 这九个权限是三个三个一组的！其中，我们可以使用数字来代表各个权限，各权限的分数对照表如下：</p><ul><li>r:4</li><li>w:2</li><li>x:1</li></ul><p>每种身份(owner&#x2F;group&#x2F;others)各自的三个权限(r&#x2F;w&#x2F;x)分数是需要累加的，例如当权限为： -rwxrwx— 分数则是：</p><ul><li>owner &#x3D; rwx &#x3D; 4+2+1 &#x3D; 7</li><li>group &#x3D; rwx &#x3D; 4+2+1 &#x3D; 7</li><li>others&#x3D; — &#x3D; 0+0+0 &#x3D; 0</li></ul><p>所以等一下我们设定权限的变更时，该文件的权限数字就是 <strong>770</strong>。变更权限的指令 chmod 的语法是这样的：</p><p> chmod [-R] xyz 文件或目录</p><p>选项与参数：</p><ul><li><strong>xyz</strong> : 就是刚刚提到的数字类型的权限属性，为 <strong>rwx</strong> 属性数值的相加。</li><li><strong>-R</strong> : 进行递归(recursive)的持续变更，以及连同次目录下的所有文件都会变更</li></ul><p>举例来说，如果要将 <strong>.bashrc</strong> 这个文件所有的权限都设定启用，那么命令如下：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs shell">[root@www ~]# ls -al .bashrc<br>-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc<br>[root@www ~]# chmod 777 .bashrc<br>[root@www ~]# ls -al .bashrc<br>-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc<br></code></pre></td></tr></table></figure><p>那如果要将权限变成 <em>-rwxr-xr–</em> 呢？那么权限的分数就成为 [4+2+1][4+0+1][4+0+0]&#x3D;754。</p><h3 id="符号类型改变文件权限"><a href="#符号类型改变文件权限" class="headerlink" title="符号类型改变文件权限"></a>符号类型改变文件权限</h3><p>还有一个改变权限的方法，从之前的介绍中我们可以发现，基本上就九个权限分别是：</p><ul><li>user：用户</li><li>group：组</li><li>others：其他</li></ul><p>那么我们就可以使用 <strong>u, g, o</strong> 来代表三种身份的权限。</p><p>此外， <strong>a</strong> 则代表 <strong>all</strong>，即全部的身份。读写的权限可以写成 r, w, x，也就是可以使用下表的方式来看：</p><table><thead><tr><th>chmod</th><th>u  go  a</th><th>+(加入)  -(除去)  &#x3D;(设定)</th><th>r  w  x</th><th>文件或目录</th></tr></thead></table><p>如果我们需要将文件权限设置为 <strong>-rwxr-xr–</strong> ，可以使用 chmod u&#x3D;rwx,g&#x3D;rx,o&#x3D;r 文件名 来设定:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash"> <span class="hljs-built_in">touch</span> test1    // 创建 test1 文件</span><br><span class="hljs-meta prompt_"># </span><span class="language-bash"><span class="hljs-built_in">ls</span> -al test1    // 查看 test1 默认权限</span><br>-rw-r--r-- 1 root root 0 Nov 15 10:32 test1<br><span class="hljs-meta prompt_"># </span><span class="language-bash"><span class="hljs-built_in">chmod</span> u=rwx,g=rx,o=r  test1    // 修改 test1 权限</span><br><span class="hljs-meta prompt_"># </span><span class="language-bash"><span class="hljs-built_in">ls</span> -al test1</span><br>-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1<br></code></pre></td></tr></table></figure><p>而如果是要将权限去掉而不改变其他已存在的权限呢？例如要拿掉全部人的可执行权限，则：</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs shell"><span class="hljs-meta prompt_"># </span><span class="language-bash"><span class="hljs-built_in">chmod</span>  a-x test1</span><br><span class="hljs-meta prompt_"># </span><span class="language-bash"><span class="hljs-built_in">ls</span> -al test1</span><br>-rw-r--r-- 1 root root 0 Nov 15 10:32 test1<br></code></pre></td></tr></table></figure>]]>
    </content>
    <id>https://128374.xyz/2026/03/27/%E7%AC%94%E8%AE%B0/linux/linux%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95/</id>
    <link href="https://128374.xyz/2026/03/27/%E7%AC%94%E8%AE%B0/linux/linux%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95/"/>
    <published>2026-03-27T09:14:27.000Z</published>
    <summary>linux的基础命令</summary>
    <title>Linux基本语法</title>
    <updated>2026-06-03T13:51:31.591Z</updated>
  </entry>
  <entry>
    <author>
      <name>KingPenguinMan</name>
    </author>
    <category term="story" scheme="https://128374.xyz/categories/story/"/>
    <category term="杂谈" scheme="https://128374.xyz/tags/%E6%9D%82%E8%B0%88/"/>
    <content>
      <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look.">  <script id="hbeData" type="hbeData" data-hmacdigest="7ef9610f056b838ecb54fa766a86e109562594b80355e69e9a3d61565155fb50">46a82c97c66f1f54d6663ff636ca3049a3b5364d3172d72412e16e8c1bf04c6826d35046b9cc680cf39c8777c23b11e7b6fddeeb53153db73bebe2a63d6f4f5ed834cc9389e780497dd4ffd68b4da5ec4e3ce56313935ea65b9d0e7ef72a45f419164f3db8ce79cf036b182b8ac8bdf9bb99f34728b2dd21eb519681de9df50eb9934a16e1d954025da96e320bb8394ee8e6c2defc9771ba7e4c27946ed0fb46733953deb693890de7fbb937b12bfb2fdb92af3b01178182d5fef910b04ce6e2b95a8bfb6c2a30af465342082916db2424322e3e4e4926378eda6fccaffeeb9e0b3f61296f3be541fe1dab68464fd1d78f42cc6406c0900afbd06a19e73aaef437906011a14b3fdb76e6355d55979029aedb7d3114d9e88fd242f05e375fa94316552d3007010d272dc88926bce4486d6ec70ba69ec157ad16a788178ad1c5ed3ea8a64c3b954305e267cbc9125ed05c42551f6a748a43ab10b77536e6749cc4bd50e392a19f7f12e8fef5cced0ab47d287a4d4521c6725405a28d8402f943cd31d0c31c18bf35a4fc4b59c1214e37a44b1b879c552275cb51b4230ad015703823dd9bb5a8ab4599c2fbbf902f6ddd7e14092e61f12f2cbb2344adc7dc6a975f3f07c4e59f6f68e1e0075e3bdf64c015f18cd101852d0a4272458d9d755c0f02c94a18d1c0dc2af70b22e52c6b1f80f4911ee5fe75748a8ac4f79e71ab334868d78d8418c81f5465b664a92cf43e3d1622e049efaf0398dbd56f30f835ab5ee1409e0476c10264ad2cc9150738fac910d58f377414decbac5fcae71350e6cb69d342cf2e3f2395f69488d12aa67646786919076647fce2808c9a3c8e62d95f69bc0e63156e637331a3925f68d26a500e7cb092a35064722be4aee32fad8047d66827d6b215c49ad5315dfbc76d1b06818058b211e0b1d302bd191448b610d5bf0a0e6ace9c84fd90e7f28dee004ab19dd62d3c9c7d1f23904ca556248a94ded1246d6bc73a08054b772653d7f736470a0be2fd3751c2178fa5d42c7aa592202b3561382d025ba1799661c87850debb4da0d8e062081eb95b7dc77461705bbcedc309528cd15b8b4653d75bfd70af4518d4ee051d3203a644ff59ac06f74cb1aa485cfbfda085dee0e29f57d73f200ad3c9165e92ee084e4d8ca61e1663cadf6805e1bbd7e3974448650bf2a3e88e20decb08786cfa1c69204f372e748f05c07d3e9e948d8e0344eb0889f46e4a7c1d684ec27ccc48615504ac40293d142466ede3a288cd002c44151f4c7570116c748e07660aabd75453746b2b7dac2e492048a1741698003387917697f38d33d49dd4e6aa2d4b2b6e1ff76260688216427756abcf34b2041234088769cae221606c339ebc3ee741538b7a159aa01d7dc8893b6a521e4272846f0833f8ab78b3b34dfd1ccb984038a70ee82f85881871175209142aca70d861fc9053f7ee7a97ebb189c9199c6b008b238024769d4e71f3984efd22a45c1e10fabf521cc63cf5374a8a2a291e02338e1a15e350c6c7605cc6b5d8c713d7b36e9c2dbfded335502dea0fa67688520a6df460b780869024c0072a1f9fe1b6ff1a12457ec525983215de9edc821987152913340e18fde1197676905a90f2aac3c97ea2309932816716ca21855966624595316bcfb63a2a0dc30020e348652091a10c1df446d9ed7f3a112ec12daeb6e0c4290b6bcb93d9d3bb15d4c151ca197973dd601150d89a378a9b5885e0d1ba7ba0b8d1e872835c6f36ca4867267d2949d5a3145d451c78894c24d263d02c9d61a1ab701c1c53daa751dc3397fba5c249fba236eed116e73400825095ee2663347586dc37344720f33a7abe0753d550d546837d096af4e8f89fc182715dad2ed40ddeee4d832ebde4f8dd7eeff9f9122f1b978fdf009315524b820c98a33b3a374532965acc336f70f4acafcce6a8e6aa13e0aab5dc8fe3cca7cf086d2893821a8b6a700aa5c775de85d10a5aa0aff1dd233919c6ff33e6bfdaebf0ae1137208b3588c7dc1cce74217c35ea3bf5544cebc1a51d682502950dbfb71a7fb68b107f11789693a66df389262707b2cd915c64fa3d29b7c5d058544824977e82d8b5562315ea970f22fd89da626162584dcf1be3557ed92b87bfceb7a801845e106426d53464d62e82e7e1ecb7f98b36c93e6750865ef5150138d8a5d61fd70b0e55eac1a3df738a30615c9db1d36f244f95771ba8bc80338116f9ea2e1ea252383d59fd48c4fa5593a62dac4c264e8e586c4020a0f58d47930e8a929bea95ad0dab8f6952a6dd3518796a55211e516c3b5ab175422f91b0663a3f7ba5265a68bb27e00925b8492db2f7711690c94cd08d754d5252fbd7ef10c0054465bffd49a86effb05a5b28e9da2721c5132fbdb43a5e610c592d0452fc20c33ea0edcd2faca9a8d17217b4338c396c2bea361e79916fc4a9fd0c9de9bc5d8986561649bebee53e9b722a1f4c1b7cf4a19a92539481893303faf0edc4de02c2b23eff4b8a4fbe5d2645df09fa807e17d141549623466eea75a0eca9650ae2cbe26c871c073b5558a7d5ec37af77f78b6f0305acc3b755a77d939873311842ba637f9bbf45cd806f2fa7496fcc35f9eae21f02295926ac7f2421a3bdab638ddbed4e19c5651ebc585e7c82f8849c56ecd5a74966de1495621ce70834f1ea29f76dd1fb69cd3d52bae7db7987e32f12ea8c8625acb408310a477427bc92b82876929aeae8dd351ebf6dc71bf21ed2b06765517840af61b41f0ffa0a93803a60b450d873369915524597ce3a5e0bdf450926bdf93802f24345d369bb4e1d0dcce85e703b79e15ce1580387b2ce8560d2297081ce0eb9036071c27ad89d6bbeef54bffdff053069c7e9b1788e5daa12b5ba4e6cdf64c9d48f187c32c8c278b36b6b17c6763cdfe98bd79bbb3081dd5f7cf0055af68f941097c8ec35badc9d3735a7cb8c9d19149deded505b745416a2ea17d1f38cdcb8cb59014f1b15b063bc21f9b10896c446b7871dd7e710319a59f3610973d80470c8b2d223d092c26ccc64275abbfd9b1ef23e3bed5037613bf73b97e53a81f0da9302e4f894f9e8fbebf4b53d0b95573e59b70db0b3e8b87a77b0c53fb75b36d1f650458ed554c315c38e8a1647df011f24c83605da45f264decc9b5aa643885dc723417c6a774889033a4ae6e8d0d5fa26cf493b5002863bf471f6ab85ec7b719c58f26fac7c9646bd6211178dc5bc60950ca28aaaaddad4b98d7860337dc0d426241ae73a837c301f1be26d5c8b308d003cfb2be356ce5e5088c2c0ba1078914cfd0846855b18367c0998d52ce9f861c2561024d77c027553e64ec7c77839d2a574efde8259ce9b68622bd8fc34c112866ad1e9b914fecc1026fca43fb5613076717f74f616f2d753846220759a7a2090a4a8a1d9b5b9239488e89e302e9378b29ee0a59fab776e41337f12ff45da075afea1e147a328dc0946fe8bcc930455be841bf88f7525c0c2b56d184f0e985061f81394cf358f356f716d54f58b2ad28b21325f7febb023d7f8b1f4f2bb6469c61ed24acdff27b82f3330fb9c7654a52b7ea311a3b210f827d4927d9618ab51fac0e76b484a50e1c64c93b7b2d692dd049643a7f6842c1dca9ac4fe579aa7e44a815b2ee20b5ee875b80abc34df3c5ff41ae1e6a724d8362161daaf0919d6632a0ee2021fe1bc1d0f082f737f94eabbf17b771fbcfcf1b440da8fec168f9e25bb07b65ea4297f0885370d058d03f4fa9c79724273882b47da8e9dc348c43a80eeefbfd4884d7914d473d2e71440a1be89702c616d4f781f51916b86188870374545edbd44fcd6385e61444751b6f6f4f2d74047685c1f6ad7b4293e300284180078c44213da7f659b7ee5d15fe908580bf475dc0eed5b487d42b600bd225c8494e58185d768e6c20cdb31e6abec1b2b7483160a25a9be958205c8867b6f831f1152b57497a034c3832c4be47c7719e43faa904ef72907a755983548e09ecda1c427561f69ab612cafeec7e93b3f04f47809f84cb93142fbd4cd5147f6c74fca75ab0ceb6354613ee3e0c6e0c7705a83bf2c8af4e81eca22496a64552aa305c88333dc06c904e69f4eef061126095cebcc2759b4afca50ae28db049762ada065f0dffc9cfdfc436594860e2da47ba679e3f0b12df242ffb465ffe39f2969ef1357ae8d5027b4dfdc870fc0d2b7771b3f1912795e184b2aa91ac456f0dbd24e0e296d1a7de0df83130a9be7dd65ee16756aba17e88c1a8f8f3efc3b1b451e671c88ff058e15e3550307a1abb76d187cc770c279f5c16707bb59a66bf644d6fdf3d68bb4ec4e1742993055b808e0232d3dd6115d06382983b52b1ff0af7718a9ae759410c5b3d03f30af5f7aa9b10d61fc60bef2030981e9c14b1348266a79b35c0657cc90215307453b4388af064c9c80431373a6578230bc435a8c6a6f5c242bf4062ead5913b02cc2b8778eafc9935b5b6fe53b21f6449add761eaa1e37d1646930cb2ce71975111de01ff630e590abdcf00f51ce9d3693b5eabdde271a8c736ca871dc555370e27c734bef852d9eeb73f8467a11218af55d61f15e0811c90feb864f5634df8761cec7889abebfe8f9cd867d6133b1771aaebad8592cd5cc232ef9259c4bfcff60926cee6b40dfda6ce8ad92c659ff27320f950b7ad1091621dd228bddb40f1696ac9e88fcfce5476cb20172127aad3dbca63431c3c7c116ce5a9fe6460517a203a552bd76e0ac9317cd8538494f30a24fa269a6c134031eae7c5ae5d185bc922c448efd30c1c3b50014850854ed31ef54346ee1643b5648142058a15bed7691bb29794524d6c1750f98fb30f06d897d58b3c50867c5f4d3383918e2574cdc3242003397235e2bd1908b9cd46d8fea243d0dbf83a8a7660c162c19e29ddb36f3e773777c8bd26e8686a4378fe842aa565ca3bd729b119c9004cc2b4876142357eb6bf8dc00bf105ab191d27ecc60912c119b8820974f21a056b818fcfec7c9ca8f809403585d98efa2681f8a50df3e0688cf06c5107bb519ef7d5f032baa6fc944d27d7008dd1275c7f6cba4c8f11c8f4e2b6dd43c2b71c32965967157d3497dcb70ba52b77803cd9f329cad5db3b14f26d2d8a9ad6cf95e7132d1d91ea85ff0a8c2104f4127498be6b5a0901d023b80a26b270b56af5333e4a17c5516f6bd3f3d35876c17d2ce9d4b84d577c91c562a403cb5d5265e1b5b80fef2e760f174176ad0a65b228486</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-default">      <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span>      </label>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
    </content>
    <id>https://128374.xyz/2026/03/17/Try%20to%20be%20not%20perfect/</id>
    <link href="https://128374.xyz/2026/03/17/Try%20to%20be%20not%20perfect/"/>
    <published>2026-03-17T09:07:36.000Z</published>
    <summary>Here's something encrypted, password is required to continue reading.</summary>
    <title>Why &quot; Try to  be  not perfect &quot;？</title>
    <updated>2026-06-03T13:51:31.590Z</updated>
  </entry>
</feed>
