﻿<?xl version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Jialezi `s blog]]></title> 
<description><![CDATA[--记录点滴记忆。]]></description>
<link>//blog.jialezi.net/</link>
<language>zh-cn</language>
<generator>www.emlog.net</generator>
<item>
	<title>微软Microsoft 365全局修改原始域( xxx.onmicrosoft.com)</title>
	<link>//blog.jialezi.net/?post=180</link>
	<description><![CDATA[<p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/64461640512469.png"/></p><p>&nbsp;&nbsp;&nbsp;&nbsp;<br/></p><p>&nbsp;&nbsp;&nbsp;&nbsp;按照微软的说法：首次注册 Microsoft 365 时，你创建了一个 onmicrosoft.com 域。 即使你后来添加了自定义域，原始 onmicrosoft.com 域也将用于所有 SharePoint 和 OneDrive URL。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;一直以为这个域名是不可修改的，今天有大佬分享了修改方法。<br/></p><p>&nbsp;&nbsp;&nbsp;&nbsp;这里说的修改域名是指将原始域abc.onmicrosoft.com修改成zxc.onmicrosoft.com，所有SharePoint URL 也会相应从 abc.sharepoint.com 更改为 zxc.sharepoint.com。</p><p><br/></p><p>第 1 步：验证新域名</p><p>1.检查你想要的新域的可用性。 例如，如果希望 SharePoint 和 OneDrive URL 以 zxc.sharepoint.com 开头，在浏览器中输入 https://zxc.sharepoint.com。 如果是404页面，那么这个域名可能可用。 如果提示登录或目录中找不到用户名的消息，就要换一个。 （此步骤检验方法多，例如新建账号检测是否可用等等）</p><p><br/></p><p>2.<a href="https://aka.ms/SPORenameAddDomain" target="_blank" title="https://aka.ms/SPORenameAddDomain">https://aka.ms/SPORenameAddDomain</a> 添加新的域名（必须使用该链接转到 Azure AD 管理中心的自定义域名页面，否则添加可能不成功）</p><p><br/></p><p>3.选择 添加自定义域。在“自定义域名”框中，输入完整的新“.onmicrosoft.com”域，然后选择“添加域”。（该域必须是“onmicrosoft.com”域。 例如，如果要重命名为 zxc.sharepoint.com，则输入的域应为 zxc.onmicrosoft.com）</p><p><br/></p><p>4.在页面顶部的导航中，选择租户名称,返回到自定义域名页面。 确保添加的 onmicrosoft.com 域在列表中，并且状态显示为“已验证”。（值得注意的是，在365管理中心修改或者添加的回退域状态显示为“可用”而非“已验证”，如果状态不是“已验证”，则你将无法执行重命名操作，未进一步验证）</p><p><br/></p><p>第 2 步：使用 Microsoft PowerShell 重命名域</p><p><br/></p><p>1.必需 – 下载最新的 SharePoint Online 命令行管理程序。<a href="https://go.microsoft.com/fwlink/p/?LinkId=255251" target="_blank" title="https://go.microsoft.com/fwlink/p/?LinkId=255251">https://go.microsoft.com/fwlink/p/?LinkId=255251</a></p><p><br/></p><p>（如果安装过旧版就需要先卸载，mac不支持这个程序）</p><p><br/></p><p>2.以全局管理员或 SharePoint 管理员身份连接到 SharePoint Online</p><p><br/></p><p>命令为：Connect-SPOService -Url https://abc-admin.sharepoint.com -Credential admin@abc.com （根据实际sharepoint网址和管理员账号修改）回车后输入密码。</p><p><br/></p><p>3.重头戏，更改域名（必须是第一步3里面添加的已验证状态的域名前缀）</p><p><br/></p><p>命令为：Start-SPOTenantRename -DomainName “zxc” -ScheduledDateTime “2021-12-31T10:25:00” （这里的datetime必须是24小时以后最长不超过30天，可以理解为排队时间，最快也要排队24小时才开始给你更改）</p><p><br/></p><p>输入命令后会有再次确认的反馈，如果没有反馈，可能是时间错误、域名未验证或者使用了旧版的软件，自行排查。</p><p><br/></p><p>4.查询进度</p><p><br/></p><p>命令为： Get-SPOTenantRenameStatus （如果有问题，就打开新的窗口再次登录）</p><p><br/></p><p>state状态在你设定的时间到之前应该是显示Queued，在处理中是InProgress，成功就是Success。</p><p><br/></p><p>5.取消重命名</p><p><br/></p><p>命令为：Stop-SPOTenantRename （必须在你设定的时间开始之前取消）</p><p><br/></p><p>6.验证是否成功</p><p><br/></p><p>从365管理中心登录sharepoint，应该就是zxc-admin.sharepoint.com了</p><p><br/></p><p>7.重命名不适用于设置了多个地理位置的组织，6个月只能重命名一次，重命名的逻辑是在原来的url上创建重定向，所以也不支持改回原来的域名。（经验证，输入原来的sharepoint地址会自动重定向到新的域名）</p><p><br/></p><p><br/></p><p>方法来源：<a href="https://hostloc.com/thread-946734-1-1.html" target="_blank" title="修改微软全局sharepoint二级域名前缀" textvalue="https://hostloc.com/thread-946734-1-1.html">https://hostloc.com/thread-946734-1-1.html</a></p><p><br/></p><p>&nbsp;</p><p><br/></p><p>&nbsp;/</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="//blog.jialezi.net/?post=40">笔记|小白笔记1（grep、if、pkill）</a></p><p><a href="//blog.jialezi.net/?post=36">教程|自定义百度网盘的分享密码</a></p><p><a href="//blog.jialezi.net/?post=34">笔记|Ubuntu 更换内核</a></p><p><a href="//blog.jialezi.net/?post=30">安装python | python2.7.12一键脚本 &amp; python3.6.0一键脚本。</a></p><p><a href="//blog.jialezi.net/?post=26">IBM-bluemix注册、上传镜像、创建docker、搭建wordpress</a></p></div>]]></description>
	<pubDate>Sun, 26 Dec 2021 09:37:16 +0000</pubDate>
	<author>jaz</author>
	<guid>//blog.jialezi.net/?post=180</guid>

</item>
<item>
	<title>通过AdSense API获取广告收益报告并推送到微信/Telegram</title>
	<link>//blog.jialezi.net/?post=179</link>
	<description><![CDATA[<p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/7041641552058.png" width="119" height="89" border="0" hspace="0" vspace="0" title="" style="width: 119px; height: 89px;"/></p><p><br/></p><p>&nbsp;&nbsp;&nbsp;&nbsp;本站挂谷歌广告Adsense已经有一段时间了，广告收益不多，有时懒得爬墙上去看报告但心里总是想看一眼，特别在手机上更觉得麻烦，之前想找有没一款app或其他插件能看到收益报告的但没有找到，最近就想研究一下API。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;通过搜索找到了Adsense官方API文档（<a href="https://developers.google.com/adsense/management/" target="_blank" title="https://developers.google.com/adsense/management/" textvalue="Link">Link</a>）,和官方给出的样例（<a href="https://github.com/googleads/googleads-adsense-examples" target="_blank" title="https://github.com/googleads/googleads-adsense-examples" textvalue="Link">Link</a>），多种语言的都有。尝试了php版的，搭建后只获取了账号ID、客户ID，其他收益报告都没显示出来，一脸懵逼的不知道怎么改。之后在一位博主的文章了找了一段PHP代码（<a href="https://www.mxp.tw/8930/" target="_blank" title="https://www.mxp.tw/8930/">Link</a>）,尝试后还是各种报错了。还好博主写得比较明白指明了每个步骤，自己跟着做，多次翻官方文档后猜测是API更新2.0之后很多代码都改了，自己改了一下勉强能自己用的，下面记录一下方法和php代码。</p><p>&nbsp;&nbsp;&nbsp;&nbsp;文末晒一下博客2021年的Adsense收入。<br/></p><p><br/></p><p><strong>前期准备</strong></p><p>一个开通了Google AdSense的账号</p><p>一个网站服务器和域名</p><p>能看一点点看懂基本逻辑的能力，Ctrl C+V的能力，会使用搜索引擎。</p><p><br/></p><p><strong>1.申請 Google APIs 凭据</strong></p><p>首先要先到 Google Cloud Platform 中启用&nbsp;<a href="https://console.cloud.google.com/apis/api/adsense.googleapis.com/overview" target="_blank" title="https://console.cloud.google.com/apis/api/adsense.googleapis.com/overview">AdSense Management API</a>。（第一次使用的，要先创建项目）</p><p>然后创建凭据（凭据——创建凭据——OAuth客户端ID——类型Web——名称随意——重定向URI填写等下你要搭建的网站域名）。</p><p>之后下载密钥（名字client_secret_xxxxxx.json）备用。</p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/35021641552058.png"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/57231641552059.png" width="571" height="381" border="0" hspace="0" vspace="0" title="" style="width: 571px; height: 381px;"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/96791641552059.png"/></p><p>&nbsp;&nbsp;&nbsp;&nbsp;<br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/11781641552059.png"/></p><p><br/></p><p><strong>2.创建PHP项目</strong></p><p>本人使用宝塔，所以在宝塔上演示。</p><p>1）安装PHP(需要5.6+，我这里用的5.6)，禁用函数里面找到putenv删了（使用composer需要）</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/211641552059.png"/></p><p><br/></p><p>2）新建网站,，把官方在github上的PHP样例（<a href="https://github.com/googleads/googleads-adsense-examples/tree/master/v2/php" target="_blank" title="https://github.com/googleads/googleads-adsense-examples/tree/master/v2/php">Link</a>）上传到网站根目录</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/84981641552059.png"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/32421641552059.png" width="720" height="333" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 333px;"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/40021641552059.png" width="720" height="350" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 350px;"/></p><p><br/></p><p>3）把第一步在Google Cloud Platform下载的client_secret_xxxxxx.json里面内容复制到client_secrets.json里面</p><p>打开宝塔终端，使用 Composer 安装Google APIs 客戶端工具.</p><pre class="brush:html;toolbar:false">/www/server/php/56/bin/php&nbsp;&nbsp;/usr/bin/composer&nbsp;install</pre><p style="text-align:center"><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/13721641552059.png"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/96751641552059.png"/></p><p><br/></p><p>4）根目录新建index.php文件</p><p>内容填写如下（后面段开始请求是自己瞎编研究半天才终于获取到的数据，只能说能用，不要在意其他格式/语法等等）</p><p><br/></p><p>打开你的网站，在网页绑定账号即可。</p><p><span style="font-size: 12px;">ps:可以考虑给网站添加密码访问，在宝塔面板——网站设置——网站目录里面打开密码访问。</span></p><pre class="brush:php;toolbar:false;">&lt;?php
require_once&nbsp;&#39;./vendor/autoload.php&#39;;
define(&#39;TOKEN_FILENAME&#39;,&nbsp;&#39;./TOKENFILE.dat&#39;,&nbsp;true);

$client&nbsp;=&nbsp;new&nbsp;Google_Client();
$client-&gt;addScope(&#39;https://www.googleapis.com/auth/adsense.readonly&#39;);
$client-&gt;setAccessType(&#39;offline&#39;);
$client-&gt;setApprovalPrompt(&#39;force&#39;);
$client-&gt;setAuthConfig(&#39;./client_secrets.json&#39;);
$auth&nbsp;=&nbsp;&quot;&quot;;
$access_token&nbsp;=&nbsp;&quot;&quot;;
$refresh_token&nbsp;=&nbsp;&quot;&quot;;
$service&nbsp;=&nbsp;new&nbsp;Google_Service_Adsense($client);

function&nbsp;gapp_refresh_token($client,&nbsp;$auth)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$params&nbsp;=&nbsp;array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;client_id&quot;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;$client-&gt;getClientId(),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;client_secret&quot;&nbsp;=&gt;&nbsp;$client-&gt;getClientSecret(),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;refresh_token&quot;&nbsp;=&gt;&nbsp;$auth[&#39;refresh_token&#39;],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;grant_type&quot;&nbsp;&nbsp;&nbsp;=&gt;&nbsp;&quot;refresh_token&quot;,
&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;$ch&nbsp;=&nbsp;curl_init();
&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1);
&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_URL,&nbsp;&#39;https://accounts.google.com/o/oauth2/token&#39;);
&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_POST,&nbsp;true);
&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_POSTFIELDS,&nbsp;$params);
&nbsp;&nbsp;&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_SSL_VERIFYPEER,&nbsp;false);
&nbsp;&nbsp;&nbsp;&nbsp;$r&nbsp;=&nbsp;curl_exec($ch);
&nbsp;&nbsp;&nbsp;&nbsp;curl_close($ch);
&nbsp;&nbsp;&nbsp;&nbsp;$g_res&nbsp;=&nbsp;json_decode($r,&nbsp;true);
&nbsp;&nbsp;&nbsp;&nbsp;$access_token&nbsp;=&nbsp;$g_res[&#39;access_token&#39;];
&nbsp;&nbsp;&nbsp;&nbsp;$expires_in&nbsp;=&nbsp;$g_res[&#39;expires_in&#39;];
&nbsp;&nbsp;&nbsp;&nbsp;$scope&nbsp;=&nbsp;$g_res[&#39;scope&#39;];
&nbsp;&nbsp;&nbsp;&nbsp;$auth[&#39;access_token&#39;][&#39;access_token&#39;]&nbsp;=&nbsp;$access_token;
&nbsp;&nbsp;&nbsp;&nbsp;$auth[&#39;access_token&#39;][&#39;created&#39;]&nbsp;=&nbsp;time();
&nbsp;&nbsp;&nbsp;&nbsp;$auth[&#39;expires_time&#39;]&nbsp;=&nbsp;intval($expires_in)&nbsp;+&nbsp;time()&nbsp;-&nbsp;30;
&nbsp;&nbsp;&nbsp;&nbsp;file_put_contents(TOKEN_FILENAME,&nbsp;json_encode($auth));
&nbsp;&nbsp;&nbsp;&nbsp;$client-&gt;setAccessToken($auth[&#39;access_token&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$client;
}

if&nbsp;(isset($_GET[&#39;code&#39;]))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$client-&gt;authenticate($_GET[&#39;code&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;$access_token&nbsp;&nbsp;=&nbsp;$client-&gt;getAccessToken();
&nbsp;&nbsp;&nbsp;&nbsp;$refresh_token&nbsp;=&nbsp;$client-&gt;getRefreshToken();

&nbsp;&nbsp;&nbsp;&nbsp;file_put_contents(TOKEN_FILENAME,&nbsp;json_encode(array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;access_token&#39;&nbsp;&nbsp;=&gt;&nbsp;$access_token,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;refresh_token&#39;&nbsp;=&gt;&nbsp;$refresh_token,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;expires_time&#39;&nbsp;&nbsp;=&gt;&nbsp;intval($access_token[&#39;expires_in&#39;])&nbsp;+&nbsp;intval($access_token[&#39;created&#39;])&nbsp;-&nbsp;30,
&nbsp;&nbsp;&nbsp;&nbsp;)));

}

if&nbsp;(file_exists(TOKEN_FILENAME)&nbsp;&amp;&amp;&nbsp;filesize(TOKEN_FILENAME)&nbsp;&gt;&nbsp;0)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$auth&nbsp;=&nbsp;json_decode(file_get_contents(TOKEN_FILENAME),&nbsp;true);
&nbsp;&nbsp;&nbsp;&nbsp;//還沒過期
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(time()&nbsp;&lt;&nbsp;$auth[&#39;expires_time&#39;])&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$client-&gt;setAccessToken($auth[&#39;access_token&#39;]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$access_token&nbsp;=&nbsp;$client-&gt;getAccessToken();
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//過期了去刷過
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isset($auth[&#39;refresh_token&#39;])&nbsp;&amp;&amp;&nbsp;!empty($auth[&#39;refresh_token&#39;]))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$client&nbsp;=&nbsp;gapp_refresh_token($client,&nbsp;$auth);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#39;&lt;a&nbsp;class=&quot;login&quot;&nbsp;href=&quot;&#39;&nbsp;.&nbsp;$client-&gt;createAuthUrl()&nbsp;.&nbsp;&#39;&quot;&gt;綁定&lt;/a&gt;&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#39;&lt;a&nbsp;class=&quot;login&quot;&nbsp;href=&quot;&#39;&nbsp;.&nbsp;$client-&gt;createAuthUrl()&nbsp;.&nbsp;&#39;&quot;&gt;綁定&lt;/a&gt;&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;exit;
}
//到這邊就是授權狀態中，可以開始請求



if&nbsp;(isset($_GET[&#39;t&#39;])||isset($_GET[&#39;end&#39;]))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isset($_GET[&#39;t&#39;])){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;$_GET[&#39;t&#39;];
&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;$_GET[&#39;end&#39;];
&nbsp;&nbsp;&nbsp;&nbsp;}
}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$t&nbsp;=&nbsp;date(&#39;Ymd&#39;,&nbsp;time());;
}
$Y0&nbsp;=&nbsp;$Y1&nbsp;=&nbsp;substr($t,0,4);
$m0&nbsp;=&nbsp;$m1&nbsp;=&nbsp;substr($t,4,2);
$d0&nbsp;=&nbsp;$d1&nbsp;=&nbsp;substr($t,-2);

if&nbsp;(isset($_GET[&#39;from&#39;]))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$from&nbsp;=&nbsp;$_GET[&#39;from&#39;];
&nbsp;&nbsp;&nbsp;&nbsp;$Y1&nbsp;=&nbsp;substr($from,0,4);
&nbsp;&nbsp;&nbsp;&nbsp;$m1&nbsp;=&nbsp;substr($from,4,2);
&nbsp;&nbsp;&nbsp;&nbsp;$d1&nbsp;=&nbsp;substr($from,-2);
&nbsp;&nbsp;&nbsp;&nbsp;
}&nbsp;

$optParams&nbsp;=&nbsp;array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;pageSize&#39;&nbsp;=&gt;&nbsp;5,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;pageToken&#39;&nbsp;=&gt;&nbsp;null);
$accounts&nbsp;=&nbsp;$service-&gt;accounts-&gt;listAccounts($optParams);
$accountId&nbsp;=&nbsp;$accounts[0][&#39;name&#39;];

$optParams&nbsp;=&nbsp;array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startDate.year&#39;&nbsp;=&gt;&nbsp;$Y1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startDate.month&#39;&nbsp;=&gt;&nbsp;$m1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startDate.day&#39;&nbsp;=&gt;&nbsp;$d1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endDate.year&#39;&nbsp;=&gt;&nbsp;$Y0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endDate.month&#39;&nbsp;=&gt;&nbsp;$m0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endDate.day&#39;&nbsp;=&gt;&nbsp;$d0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;languageCode&quot;&nbsp;&nbsp;=&gt;&nbsp;&#39;zh-cn&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;dimensions&#39;&nbsp;=&gt;&nbsp;array(&#39;DOMAIN_NAME&#39;),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;orderBy&#39;&nbsp;=&gt;&nbsp;&#39;-ESTIMATED_EARNINGS&#39;,&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;metrics&#39;&nbsp;=&gt;&nbsp;array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;ESTIMATED_EARNINGS&#39;,&nbsp;&#39;PAGE_VIEWS&#39;,&nbsp;&#39;IMPRESSIONS&#39;,&nbsp;&#39;IMPRESSIONS_RPM&#39;,&nbsp;&#39;CLICKS&#39;,&nbsp;&#39;COST_PER_CLICK&#39;,&nbsp;&#39;PAGE_VIEWS_CTR&#39;),
);
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Run&nbsp;report.
$report&nbsp;=&nbsp;$service-&gt;accounts_reports-&gt;generate($accountId,&nbsp;$optParams);

$dm=&#39;&#39;;
foreach($report[&#39;rows&#39;]&nbsp;as&nbsp;$row)&nbsp;{
	$dm&nbsp;=&nbsp;$dm.&quot;
	&lt;div&gt;------&quot;.$row[&#39;cells&#39;][0][&#39;value&#39;].&quot;------&lt;br&gt;
	估算收入：&quot;.$row[&#39;cells&#39;][1][&#39;value&#39;].&quot;&lt;br&gt;
	网页浏览量：&quot;.$row[&#39;cells&#39;][2][&#39;value&#39;].&quot;&lt;br&gt;
	展示次数：&quot;.$row[&#39;cells&#39;][3][&#39;value&#39;].&quot;&lt;br&gt;
	每千次展示收入：&quot;.$row[&#39;cells&#39;][4][&#39;value&#39;].&quot;&lt;br&gt;
	点击次数：&quot;.$row[&#39;cells&#39;][5][&#39;value&#39;].&quot;&lt;br&gt;
	每次点击费用：&quot;.$row[&#39;cells&#39;][6][&#39;value&#39;].&quot;&lt;br&gt;
	网页点击率：&quot;.$row[&#39;cells&#39;][7][&#39;value&#39;].&quot;&lt;br&gt;&lt;/div&gt;&quot;;
};
$html&nbsp;=&nbsp;&quot;&lt;h2&gt;Adsense统计&lt;/h2&gt;
时间：&quot;.$from.&quot;至&quot;.$t.&quot;&lt;br&gt;
&lt;br&gt;--------------总计--------------&lt;br&gt;
估算收入：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][1][&#39;value&#39;].&quot;&lt;br&gt;
网页浏览量：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][2][&#39;value&#39;].&quot;&lt;br&gt;
展示次数：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][3][&#39;value&#39;].&quot;&lt;br&gt;
每千次展示收入：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][4][&#39;value&#39;].&quot;&lt;br&gt;
点击次数：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][5][&#39;value&#39;].&quot;&lt;br&gt;
每次点击费用：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][6][&#39;value&#39;].&quot;&lt;br&gt;
网页点击率：&quot;.$report[&#39;totals&#39;][&#39;cells&#39;][7][&#39;value&#39;].&quot;&lt;br&gt;
&lt;br&gt;----------------详情----------------&lt;br&gt;
&quot;.$dm;

echo&nbsp;&quot;&lt;style&gt;div{display:&nbsp;inline-flex;&nbsp;width:&nbsp;220px;&nbsp;margin:&nbsp;10px;}&lt;/style&gt;&quot;;
echo&nbsp;$html;

print&nbsp;&quot;&lt;br&gt;-------------End---666-------------&lt;br&gt;&quot;;</pre><p><br/></p><p style="text-align: center;"><img src="https://blog.jialezi.net/admin/editor/php/upload/64591641552059.png"/></p><p><br/></p><p style="text-align: center;"><img src="https://blog.jialezi.net/admin/editor/php/upload/93981641552059.png"/></p><p><br/></p><p>5）打开默认是当天收益报告，其他参数&nbsp;</p><pre class="brush:xml;toolbar:false">t&nbsp;--&nbsp;指定某天的数据
from&nbsp;--&nbsp;指定从某天的开始的数据，默认是当天
end&nbsp;--&nbsp;指定到某天的结束的数据，默认是当天
如：
https://ads.xxx.xxxx/?t=20211001，2021年10月1日的收益报告。
https://ads.xxx.xxxx/?from=20211001，2021年10月1日到今天的收益报告。
https://ads.xxx.xxxx/?from=20211001&amp;end=20211101，2021年10月1日到2021年11月1日的收益报告。</pre><p><br/></p><p>6）代码获取的指标和参数仅按我需求写的，如需添加其他指标，可以文档参考</p><p><a href="https://developers.google.com/adsense/management/reference/rest/v2/accounts.reports/generate" target="_blank" title="https://developers.google.com/adsense/management/reference/rest/v2/accounts.reports/generate" textvalue="https://developers.google.com/adsense/management/reference/rest/v2/accounts.reports/generate">https://developers.google.com/adsense/management/reference/rest/v2/accounts.reports/generate</a></p><p>使用页面在线调试（Try this API）</p><p><br/></p><p>然后在修改代码里面的$optParams</p><pre class="brush:php;toolbar:false;">$optParams&nbsp;=&nbsp;array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startDate.year&#39;&nbsp;=&gt;&nbsp;$Y1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startDate.month&#39;&nbsp;=&gt;&nbsp;$m1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;startDate.day&#39;&nbsp;=&gt;&nbsp;$d1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endDate.year&#39;&nbsp;=&gt;&nbsp;$Y0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endDate.month&#39;&nbsp;=&gt;&nbsp;$m0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;endDate.day&#39;&nbsp;=&gt;&nbsp;$d0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;dimensions&#39;&nbsp;=&gt;&nbsp;array(&#39;DOMAIN_NAME&#39;),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;orderBy&#39;&nbsp;=&gt;&nbsp;&#39;-ESTIMATED_EARNINGS&#39;,&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;metrics&#39;&nbsp;=&gt;&nbsp;array(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;ESTIMATED_EARNINGS&#39;,&nbsp;&#39;PAGE_VIEWS&#39;,&nbsp;&#39;IMPRESSIONS&#39;,&nbsp;&#39;IMPRESSIONS_RPM&#39;,&nbsp;&#39;CLICKS&#39;,&nbsp;&#39;COST_PER_CLICK&#39;,&nbsp;&#39;PAGE_VIEWS_CTR&#39;),
);
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Run&nbsp;report.
$report&nbsp;=&nbsp;$service-&gt;accounts_reports-&gt;generate($accountId,&nbsp;$optParams);</pre><p><br/></p><p><strong>3.将报告推送到微信、Telegram</strong></p><p>推送微信这里选择<a href="https://www.pushplus.plus/" target="_blank" title="https://www.pushplus.plus/">pushplus</a>，微信登录后获取到token</p><p>Telegram也准备好bot token（<a href="https://blog.jialezi.net/?post=168" target="_blank" title="https://blog.jialezi.net/?post=168">Telegram相关学习https://blog.jialezi.net/?post=168</a>）</p><p>新建一个corn.php，填写下面代码。</p><p><br/></p><p>宝塔计划任务新建一个访问url任务（按自己填写）</p><p>或手动添加</p><p>58 23 * * * /usr/bin/curl &quot;https://ads.xxxx.xxxx/corn.php?pass=123&quot; &gt; /dev/null 2&gt;&amp;1</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/84981641552059.png" width="720" height="400" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 400px;"/></p><p><br/></p><pre class="brush:php;toolbar:false">&lt;?php&nbsp;
//cron.php页

if&nbsp;($_GET[&#39;pass&#39;]!=&#39;123&#39;)&nbsp;{&nbsp;&nbsp;//设置密码
&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;HTTP/1.1&nbsp;403&nbsp;Forbidden&#39;);
&nbsp;&nbsp;&nbsp;&nbsp;exit();
}else{

require(&#39;index.php&#39;);

function&nbsp;push($url,$params){&nbsp;
&nbsp;&nbsp;$ch&nbsp;=&nbsp;curl_init($url);
&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_HEADER,&nbsp;false);
&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1);
&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_POST,&nbsp;1);
&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_POSTFIELDS,&nbsp;($params));
&nbsp;&nbsp;curl_setopt($ch,&nbsp;CURLOPT_SSL_VERIFYPEER,&nbsp;false);
&nbsp;&nbsp;$result&nbsp;=&nbsp;curl_exec($ch);
&nbsp;&nbsp;curl_close($ch);
&nbsp;&nbsp;return&nbsp;$result&nbsp;;
}

//TG
$tgapi=&#39;https://api.telegram.org/bot1545138812:AAGroid6uSJFbQxRM2f8X6KHlsnDReHUkvE/sendMessage&#39;;&nbsp;//修改成自己的Token&nbsp;&nbsp;
$code&nbsp;=&nbsp;array(&quot;&lt;br&gt;&quot;,&nbsp;&quot;&lt;/div&gt;&quot;,&nbsp;&quot;&lt;div&gt;&quot;,&nbsp;&quot;&lt;h2&gt;&quot;,&nbsp;&quot;&lt;/h2&gt;&quot;);
$text&nbsp;=&nbsp;str_replace($code,&#39;&#39;,$html);
$tgparams=[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;chat_id&#39;=&gt;&nbsp;&#39;1138220708&#39;,&nbsp;//接收的tg账号id
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;text&#39;=&gt;$text,
];
//推送到tg，不需要就注释了
push($tgapi,$tgparams);

//pushplus
$pushplus=&#39;http://www.pushplus.plus/send&#39;;
$params=[
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;token&#39;=&gt;&nbsp;&#39;90fc33xxxxxxxxxx&#39;,&nbsp;//修改成自己pushplus的Token&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;title&#39;=&gt;&#39;Adsense报告&#39;,&nbsp;//标题
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;content&#39;=&gt;$html,
&nbsp;&nbsp;];
//推送到wx
push($pushplus,$params);&nbsp;

}</pre><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/8981641552060.png"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/39331641552060.png"/></p><p><br/></p><p><strong style="white-space: normal;">4.2021年本博客的Adsense收入</strong></p><p dir="ltr">虽然没多少，但能承担服务和域名的费用，足够了。</p><p dir="ltr"><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/94201641552060.png" width="354" height="285" border="0" hspace="0" vspace="0" title="" style="width: 354px; height: 285px;"/></p><p><br/></p><p>10月1日到今天</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/15811641552060.png"/></p><p dir="ltr"><br/></p><p dir="ltr">参考：</p><p dir="ltr"><a href="https://github.com/googleads/googleads-adsense-examples" _src="https://github.com/googleads/googleads-adsense-examples">https://github.com/googleads/googleads-adsense-examples</a></p><p dir="ltr"><a href="https://developers.google.com/adsense/management/reference/rest" _src="https://developers.google.com/adsense/management/reference/rest">https://developers.google.com/adsense/management/reference/rest</a></p><p dir="ltr"><a href="https://www.mxp.tw/8930/" _src="https://www.mxp.tw/8930/">https://www.mxp.tw/8930/</a></p><p><br/></p><p><br/></p><p>.</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="//blog.jialezi.net/?post=40">笔记|小白笔记1（grep、if、pkill）</a></p><p><a href="//blog.jialezi.net/?post=36">教程|自定义百度网盘的分享密码</a></p><p><a href="//blog.jialezi.net/?post=34">笔记|Ubuntu 更换内核</a></p><p><a href="//blog.jialezi.net/?post=30">安装python | python2.7.12一键脚本 &amp; python3.6.0一键脚本。</a></p><p><a href="//blog.jialezi.net/?post=26">IBM-bluemix注册、上传镜像、创建docker、搭建wordpress</a></p></div>]]></description>
	<pubDate>Tue, 09 Nov 2021 01:05:18 +0000</pubDate>
	<author>jaz</author>
	<guid>//blog.jialezi.net/?post=179</guid>

</item>
<item>
	<title>利用 Power Automate 自动流，实现邮局api</title>
	<link>//blog.jialezi.net/?post=178</link>
	<description><![CDATA[<p><strong><span style="font-size: 16px;">&nbsp;&nbsp;&nbsp;&nbsp;本文全文转自：<a href="https://www.wolai.com/blackacloud/t57MQpFbo2dkpEVABe66hZ" target="_blank" title="邮件 API Power Automate" textvalue="https://www.wolai.com/blackacloud/t57MQpFbo2dkpEVABe66hZ">https://www.wolai.com/blackacloud/t57MQpFbo2dkpEVABe66hZ</a> <br/></span></strong></p><p><strong><br/></strong></p><p><br/></p><hr/><p><br/></p><h2 style="text-align: left;" dir="ltr">Power Automate(简称 <span style="font-size: 16px;"></span>PA)</h2><p>官方文档介绍：</p><pre>-&nbsp;自动化业务流程

-&nbsp;发送过期任务的自动提醒

-&nbsp;在计划中系统之间移动业务数据

-&nbsp;连接到接近&nbsp;300&nbsp;个数据源或任何公开发布的&nbsp;API

-&nbsp;甚至可以在本地计算机中自动执行任务，如在&nbsp;Excel&nbsp;中计算数据。</pre><p>因为PA好多模板是基于微软的邮件进行通知，所以PA 在使用outlook发邮件的时候，可以连续发信。因此，萌生了，用PA 联合 outlook，实现简单的发信api。</p><p>普通程序使用 smtp进行发信，经常会出现发现间隔过短会造成发信失败。然鹅使用PA ，自家 outlook 可以一秒内发信多次，大大提高发信的成功率。</p><h2>原理</h2><p>使用微软官方的 Power Automate （flow 流）服务，构建发信api。</p><h2>演示笔记</h2><h4>登录 Power Automate 平台</h4><p>官网传送门 : <a href="https://flow.microsoft.com/zh-cn/">Power Automate | Microsoft Power Platform</a></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/50511636383870.jpg" width="720" height="164" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 164px;"/></p><h3>创建流</h3><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/60621636383871.jpg" width="720" height="400" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 400px;"/></p><p><br/></p><p>控制台 → 创建 → 即时云端流 → 触发方式 （当收到 HTTP 请求时）→ 创建</p><p><br style="white-space: normal;"/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/58011636383872.jpg" width="720" height="407" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 407px;"/></p><h2>构建流</h2><h3>构建请求头</h3><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/6891636383872.jpg" width="720" height="490" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 490px;"/></p><p><br/></p><p>点击 使用示例有效负载生成 架构，填入你想要请求的参数。</p><p>当前只演示比较简单的邮件，具体请按照自己意愿处理。</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/83371636383873.jpg" width="720" height="323" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 323px;"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/45711636383874.jpg" width="634" height="559" border="0" hspace="0" vspace="0" title="" style="width: 634px; height: 559px;"/></p><p><br/></p><p>点击 新步骤</p><h3>绑定邮件信息</h3><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/43941636383874.jpg" width="598" height="547" border="0" hspace="0" vspace="0" title="" style="width: 598px; height: 547px;"/></p><p><br/></p><p>选择 发送电子邮件 操作</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/64821636383875.jpg" width="720" height="456" border="0" hspace="0" vspace="0" title="" style="width: 720px; height: 456px;"/></p><p><br/></p><p>填入相关动态内容</p><h3>返回响应（可有可无）</h3><p>完成邮件后，我们api需要返回一个状态码</p><p><br style="white-space: normal;"/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/31341636383876.jpg" width="716" height="659" border="0" hspace="0" vspace="0" title="" style="width: 716px; height: 659px;"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/54761636383876.jpg" width="648" height="287" border="0" hspace="0" vspace="0" title="" style="width: 648px; height: 287px;"/></p><p><br/></p><p>也就是，只要流状态卫200，即返回 json数据</p><h3>保存即可</h3><p>保存。</p><p>返回 构建请求头处，获取HTTP POST URL</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/30881636383877.jpg" width="662" height="519" border="0" hspace="0" vspace="0" title="" style="width: 662px; height: 519px;"/></p><p><br/></p><h3>测试</h3><p>连续多点几下请求，邮箱收到很多。具体还得自行测试。</p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/87011636383879.jpg" width="793" height="496" border="0" hspace="0" vspace="0" title="" style="width: 793px; height: 496px;"/></p><p><br/></p><p style="text-align:center"><img src="https://s.pc.qq.com/tousu/img/20211108/8143960_1636385840.jpg" width="687" height="505" border="0" hspace="0" vspace="0" title="" style="width: 687px; height: 505px;"/></p><h2>简单聊一下</h2><p>相比之下，更愿意使用SMTP进行发信，但是自己服务器容易出现发信失败。</p><p>PA 在绑定自己邮箱的时候，尽量使用office365的账号，使用普通账号，可能outlook发信有限制。发信可能会出现到垃圾箱，如果是自己使用，可以添加收件人白名单。为什莫会进垃圾箱，不做探讨。</p><p>有相关不完善的地方，还请指正。</p><p>ps: 文章只是提供了一种比较稳定的发信方案，有资金还是使用邮局方便。</p><p><br/></p><p><br/></p><p><br/></p><p>./</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="//blog.jialezi.net/?post=12">转|装逼一刻：美国FBI给我发邮件了！</a></p><p><a href="//blog.jialezi.net/?post=74">转|关闭firefox恢复会话功能</a></p><p><a href="//blog.jialezi.net/?post=109">实现微信/QQ直接跳转到支付宝APP打开口令领红包！</a></p><p><a href="//blog.jialezi.net/?post=58">摄像头被偷窥 隐私泄漏比你想象的更严重</a></p><p><a href="//blog.jialezi.net/?post=38">利用 Caddy 轻松实现反向代理/镜像（支持自签SSL证书）</a></p></div>]]></description>
	<pubDate>Sat, 16 Oct 2021 04:44:34 +0000</pubDate>
	<author>jaz</author>
	<guid>//blog.jialezi.net/?post=178</guid>

</item>
<item>
	<title>记录|Microsoft Office 365搭建邮局开启外部邮箱转发</title>
	<link>//blog.jialezi.net/?post=177</link>
	<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;之前文章介绍过<a href="https://blog.jialezi.net/?post=158" target="_blank" title="https://blog.jialezi.net/?post=158">《利用Microsoft 365 E5开发者订阅搭建自己的邮局|设置catch-all邮箱》(https://blog.jialezi.net/?post=158)</a>，catch-all设置的就是邮件的内部转发，但有朋友尝试把邮件设置直接转发到qq/gmail等邮箱时会提示报错，这时需要开启外部邮箱转发功能。</p><p>&nbsp; &nbsp; 之前没留意到这个问题（主要我目前用的yandex邮局），看有人提出了并有人给出详细方法，本文记录一下完善步骤</p><p>&nbsp;&nbsp;&nbsp;&nbsp;下面详细步骤。（建议先看之前文章完成邮局设置再看下面步骤）</p><p><br/></p><hr/><p><br/></p><p>官方名字叫这个</p><blockquote><p>Allow users to automatically forward messages outside the organization (for example, via an Inbox rule).</p><p>，不知道怎么翻译，暂时叫转发到external email，比如gmail、QQ等等。昨晚看到有老哥有需求，发现他按照我给的貌似没效果，后面我想起来，office 365有个叫Anti-spam settings，里面的 Outbound spam filter policy ‎(always ON)‎ 默认是不允许转发到external email，否则会拦截转发。</p></blockquote><p>报错如下：</p><blockquote><p>5.7.520 Access denied, Your organization does not allow external forwarding. Please contact your administrator for further assistance. AS(7555)</p><p><br/></p></blockquote><p><br/></p><p>废话不多讲：</p><p>1.到这个网址<a href="https://protection.office.com/antispam" target="_blank" title="https://protection.office.com/antispam">Anti-spam settings（https://protection.office.com/antispam）</a>，点击Outbound spam filter policy ‎(always ON)‎&nbsp; --&gt; 编辑策略 --&gt;Automatic forwarding 那里默认是Automatic-system-controlled，改为On-forward-is-enable。</p><p>ps：点击保存，提示什么一堆的（忘了），可能会提示sorry... ，这个策略生效估计要时间，点个一两次确保微软在后台处理就行了，其他的等这个策略生效，搞这个是很之前，也没可以去留意时间</p><p>看图：</p><p style="text-align: center;"><img src="https://blog.jialezi.net/admin/editor/php/upload/53821634358182.png" width="700" height="374" border="0" hspace="0" vspace="0" title="" style="width: 700px; height: 374px;"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/2011634358183.png" width="700" height="614" border="0" hspace="0" vspace="0" title="" style="width: 700px; height: 614px;"/></p><p><br/></p><p>2.配置转发联系人。</p><p>ps:最后将external email加入到groupt或者是mail contact，第一种就不讲了，比较复杂，不是直接添加guest，而是通过group方式直接添加。</p><p>到这个地址https://outlook.office365.com/ecp/?form=eac&amp;mkt=en-US</p><p>点击右侧recipients，再点击contacts，点击加号那里，选择mail contact。自己补充好external email信息，注意display name不要和其他用户重复。</p><p>看图</p><p><br/></p><p style="text-align: center;"><img src="https://blog.jialezi.net/admin/editor/php/upload/27441634358184.png" width="700" height="359" border="0" hspace="0" vspace="0" title="" style="width: 700px; height: 359px;"/></p><p><br/></p><p><br/></p><p>3.配置转发的邮箱</p><p>ps：为什么上面要配置转发联系人？因为我的是管理员，那就按照“标准”配置，普通用户开启第一步的拦截规则，再到outlook.office.com那里设置，估计就可以了。管理员请在exchange配置。</p><p><br/></p><p>跟第二步一样，点击右侧recipients，再点击mailboxes，选择一个你需要转发邮箱到external email的用户，双击那个用户。会弹一个窗口。点击mailbox feature，往下拉，找到Mail Flow，点击view details。配置刚才步骤2的转发联系人。建议保留副本在你的邮箱</p><p>如图</p><p style="text-align: center;"><img src="https://blog.jialezi.net/admin/editor/php/upload/85701634358185.png" width="700" height="614" border="0" hspace="0" vspace="0" title="" style="width: 700px; height: 614px;"/></p><p><br/></p><p style="text-align:center"><img src="https://blog.jialezi.net/admin/editor/php/upload/26741634358186.png" width="705" height="551" border="0" hspace="0" vspace="0" title="" style="width: 705px; height: 551px;"/></p><p><br/></p><p><br/></p><p>这时就设置完成。</p><p><br/></p><hr/><p><br/></p><p>本文方法来源：<a href="https://hostloc.com/thread-825904-1-1.html" target="_blank" title="https://hostloc.com/thread-825904-1-1.html">https://hostloc.com/thread-825904-1-1.html</a></p><p>另外还有通过Powershell设置外部转发和添加DKIM的方法可供参考：<a href="https://hostloc.com/thread-822964-1-1.html" target="_blank" title="https://hostloc.com/thread-822964-1-1.html">https://hostloc.com/thread-822964-1-1.html</a></p><p><br/></p><p><br/></p><p><br/></p><p>./</p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="//blog.jialezi.net/?post=12">转|装逼一刻：美国FBI给我发邮件了！</a></p><p><a href="//blog.jialezi.net/?post=74">转|关闭firefox恢复会话功能</a></p><p><a href="//blog.jialezi.net/?post=109">实现微信/QQ直接跳转到支付宝APP打开口令领红包！</a></p><p><a href="//blog.jialezi.net/?post=58">摄像头被偷窥 隐私泄漏比你想象的更严重</a></p><p><a href="//blog.jialezi.net/?post=38">利用 Caddy 轻松实现反向代理/镜像（支持自签SSL证书）</a></p></div>]]></description>
	<pubDate>Sat, 16 Oct 2021 04:02:57 +0000</pubDate>
	<author>jaz</author>
	<guid>//blog.jialezi.net/?post=177</guid>

</item>
<item>
	<title>记录|给网站添加谷歌多语言翻译插件</title>
	<link>//blog.jialezi.net/?post=176</link>
	<description><![CDATA[<p>粗略记录一下</p><p><br/></p><p>谷歌翻译的js，</p><p>因为会加载几个域名google.com的gif请求不到的严重拖慢网页翻译，没想到好办法</p><p><br/></p><p><br/></p><pre class="brush:html;toolbar:false">&lt;script&nbsp;src=&quot;https://translate.google.cn/translate_a/element.js?cb=googleTranslateElementInit&quot;&gt;&lt;/script&gt;
&lt;script&gt;
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;googleTranslateElementInit()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;google.translate.TranslateElement(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;pageLanguage:&nbsp;&#39;zh-CN&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;需要翻译的语言，比如你只需要翻译成越南和英语，这里就只写en,vi
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;includedLanguages:&nbsp;&#39;en,zh-CN,hr,cs,da,nl,fr,de,el,iw,hu,ga,it,ja,ko,pt,ro,ru,sr,es,th,vi&#39;,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layout:&nbsp;google.translate.TranslateElement.InlineLayout.SIMPLE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;自动显示翻译横幅，就是翻译后顶部出现的那个
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoDisplay:&nbsp;true,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;还有些其他参数，由于原插件不再维护，找不到详细api了，将就了，实在不行直接上dom操作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#39;google_translate_element&#39;&nbsp;//&nbsp;触发元素的id
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);
&nbsp;&nbsp;&nbsp;&nbsp;}
&lt;/script&gt;</pre><p><br/></p><pre class="brush:html;toolbar:false">//右下角切换语言
&lt;div&nbsp;id=&quot;google_translate_element&quot;&nbsp;style=&quot;position:fixed;bottom:10px;right:10px;z-index:2000;opacity:0.7&quot;&gt;&lt;/div&gt;</pre><pre class="brush:html;toolbar:false">//css隐藏顶端的翻译选项
&lt;style&gt;.goog-te-banner-frame{display:&nbsp;none;}body{top:&nbsp;0px&nbsp;!important;}&lt;/style&gt;</pre><p><br/></p><p>插件以cookie值自动翻译，以下利用js设置googtrans为空时添加值为/zh-CN/en（默认进去翻译成英文）</p><p>另外可以以链接hash设置翻译语言，如:</p><p>https://xxx.com#googtrans(zh-CN|ja)</p><p><br/></p><pre class="brush:html;toolbar:false">function&nbsp;getck(name)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cookie_start&nbsp;=&nbsp;document.cookie.indexOf(name);
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cookie_end&nbsp;=&nbsp;document.cookie.indexOf(&quot;;&quot;,&nbsp;cookie_start);
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cookie_start&nbsp;==&nbsp;-1)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&#39;&#39;;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;v&nbsp;=&nbsp;document.cookie.substring(cookie_start&nbsp;+&nbsp;name.length&nbsp;+&nbsp;1,&nbsp;(cookie_end&nbsp;&gt;&nbsp;cookie_start&nbsp;?&nbsp;cookie_end&nbsp;:&nbsp;document.cookie.length));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;unescape(v);
&nbsp;&nbsp;&nbsp;&nbsp;}
}
if&nbsp;(getck(&quot;googtrans&quot;)&nbsp;==&nbsp;&#39;&#39;)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.cookie&nbsp;=&nbsp;&quot;googtrans=/zh-CN/en&quot;;
}</pre><p><br/></p><p><br/></p><p>新版的js，还没研究，下面设置默认自动翻译成一种语言，没有切换选项</p><p><br/></p><pre class="brush:html;toolbar:false">&lt;script&nbsp;type=&quot;text/javascript&quot;&nbsp;src=&quot;https://translate.google.cn/translate_a/element.js?cb=gtElInit&amp;amp;client=wt&quot;&gt;&lt;/script&gt;
&lt;script&nbsp;type=&quot;text/javascript&quot;&gt;
var&nbsp;gtElInit&nbsp;=&nbsp;function&nbsp;gtElInit()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;lib&nbsp;=&nbsp;new&nbsp;google.translate.TranslateService();
&nbsp;&nbsp;&nbsp;&nbsp;lib.translatePage(&#39;zh-cn&#39;,&nbsp;&#39;en&#39;,&nbsp;function&nbsp;()&nbsp;{});
}
&lt;/script&gt;</pre><p><br/></p><p><br/></p><p>考虑用法</p><p><br/></p><pre class="brush:html;toolbar:false">&lt;div&nbsp;style=&quot;text-align:center;&quot;&gt;&lt;p&gt;翻译演示&lt;p&gt;
&lt;button&nbsp;onclick=&quot;change(this);&quot;&nbsp;&nbsp;value=&quot;&quot;&gt;中文&lt;/button&gt;
&lt;button&nbsp;onclick=&quot;change(this);&quot;&nbsp;&nbsp;value=&quot;en&quot;&gt;英文&lt;/button&gt;
&lt;button&nbsp;onclick=&quot;change(this);&quot;&nbsp;&nbsp;value=&quot;ja&quot;&gt;日文&lt;/button&gt;

&lt;select&nbsp;id=&quot;select&quot;&nbsp;onchange=&quot;change(this)&quot;&nbsp;class=&quot;adres-input&quot;&gt;
	&lt;option&nbsp;value=&quot;&quot;&gt;中文&lt;/option&gt;
	&lt;option&nbsp;value=&quot;en&quot;&gt;英文&lt;/option&gt;
	&lt;option&nbsp;value=&quot;ja&quot;&gt;日文&lt;/option&gt;
	&lt;option&nbsp;value=&quot;ko&quot;&gt;韩文&lt;/option&gt;
	&lt;option&nbsp;value=&quot;ru&quot;&gt;俄文&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;

&lt;script&nbsp;type=&quot;text/javascript&quot;&nbsp;src=&quot;https://translate.google.cn/translate_a/element.js?cb=gtElInit&amp;amp;client=wt&quot;&gt;&lt;/script&gt;
&lt;script&gt;
//var&nbsp;gtElInit&nbsp;=&nbsp;function&nbsp;gtElInit()&nbsp;{
//&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;lib&nbsp;=&nbsp;new&nbsp;google.translate.TranslateService();
//&nbsp;&nbsp;&nbsp;&nbsp;lib.translatePage(&#39;zh-cn&#39;,&nbsp;&#39;en&#39;,&nbsp;function&nbsp;()&nbsp;{});
//}
function&nbsp;change(obj)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;lang&nbsp;=&nbsp;obj.value;
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;lib&nbsp;=&nbsp;new&nbsp;google.translate.TranslateService();
&nbsp;&nbsp;&nbsp;&nbsp;lib.translatePage(&#39;zh-cn&#39;,&nbsp;lang,&nbsp;function&nbsp;()&nbsp;{});
}
&lt;/script&gt;</pre><p><br/></p><p><br/></p><p>翻译接口</p><p><br/></p><p>不需要提供 tk 参数，client 类型里 t 和 webapp 需要，at 和 gtx 不需要</p><p><br style="white-space: normal;"/></p><p>curl &#39;https://translate.google.com/translate_a/single?client=at&amp;sl=zh-CN&amp;tl=en&amp;dt=t&amp;q=%E6%88%91%E6%98%AF%E5%B8%85%E9%80%BC&#39;</p><p><br/></p><p>curl &#39;https://translate.google.com/translate_a/single?client=gtx&amp;sl=zh-CN&amp;tl=en&amp;dt=t&amp;q=%E6%88%91%E6%98%AF%E5%B8%85%E9%80%BC&#39;</p><p><br/></p><p><br/></p><p><br/></p><p>相关资料:</p><p><a href="https://www.coderepublics.com/howto/how-to-google-translate.php" target="_blank" textvalue="https://www.coderepublics.com/howto/how-to-google-translate.php">https://www.coderepublics.com/howto/how-to-google-translate.php</a> </p><p><a href="https://blog.csdn.net/panshiqu/article/details/104193607" target="_blank" textvalue="https://blog.csdn.net/panshiqu/article/details/104193607">https://blog.csdn.net/panshiqu/article/details/104193607</a> </p><p><br/></p><div id="related_log" style="font-size:12px"><p><b>相关日志：</b></p><p><a href="//blog.jialezi.net/?post=52">笔记|PPT播放器-PPTviewer（office2010和2003版）</a></p><p><a href="//blog.jialezi.net/?post=84">笔记|docker利用nginx配置多域名以及多端口号</a></p><p><a href="//blog.jialezi.net/?post=105">笔记|折腾ks3c-挂pt·安装aria2·同步Gdrive·顺便挖矿</a></p><p><a href="//blog.jialezi.net/?post=37">docker | 利用 Caddy 非常简单地部署反向代理</a></p><p><a href="//blog.jialezi.net/?post=172">X3 photo gallery简单的相册程序，破解伪授权方法</a></p></div>]]></description>
	<pubDate>Wed, 06 Oct 2021 03:56:56 +0000</pubDate>
	<author>jaz</author>
	<guid>//blog.jialezi.net/?post=176</guid>

</item></channel>
</rss>