{"id":4545,"date":"2014-07-01T10:49:42","date_gmt":"2014-07-01T01:49:42","guid":{"rendered":"http:\/\/www.ka-net.org\/blog\/?p=4545"},"modified":"2021-10-25T22:45:37","modified_gmt":"2021-10-25T13:45:37","slug":"gmail-api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e3%81%99%e3%82%8bvba%e3%83%9e%e3%82%af%e3%83%ad3","status":"publish","type":"post","link":"https:\/\/www.ka-net.org\/blog\/?p=4545","title":{"rendered":"Gmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed(3)"},"content":{"rendered":"<p><a href=\"\/\/www.ka-net.org\/blog\/?p=4538\" title=\"Gmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed(2)\" target=\"_blank\" rel=\"noopener\">\u524d\u56de<\/a>\u3001<a href=\"\/\/www.ka-net.org\/blog\/?p=4524\" title=\"Gmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed\" target=\"_blank\" rel=\"noopener\">\u524d\u3005\u56de<\/a>\u3068<a href=\"https:\/\/developers.google.com\/gmail\/api\/\" title=\"Gmail API - Google Developers\" target=\"_blank\" rel=\"noopener\">Gmail API<\/a>\u3092\u6271\u3063\u3066\u304d\u307e\u3057\u305f\u304c\u3001\u4eca\u56de\u306f<a href=\"\/\/www.ka-net.org\/blog\/?p=4524\" title=\"Gmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed\" target=\"_blank\" rel=\"noopener\">\u524d\u3005\u56de<\/a>\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u30b3\u30fc\u30c9\u3092\u6539\u4fee\u3057\u3066\u3001\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\uff0664\u30d3\u30c3\u30c8\u7248Office\u306b\u5bfe\u5fdc\u3057\u305f\u30b3\u30fc\u30c9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<p><span style=\"color: #ff0000; font-weight: bold;\">\u203b \u4e0b\u8a18\u30b3\u30fc\u30c9\u306f\u65e5\u672c\u8a9e\u672c\u6587\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4ef6\u540d\u306b\u65e5\u672c\u8a9e\u3092\u5165\u308c\u308b\u3068\u6587\u5b57\u5316\u3051\u3057\u307e\u3059\u3002<\/span><\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">Option Explicit\r\n\r\n'--------------------------------------------------\r\n'\u203b \u8981\u5909\u66f4\r\n'--------------------------------------------------\r\nPrivate Const email As String = &quot;(G\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9(\u30a2\u30ab\u30a6\u30f3\u30c8ID))&quot;\r\nPrivate Const passwd As String = &quot;(Google \u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30d1\u30b9\u30ef\u30fc\u30c9)&quot;\r\nPrivate Const client_id As String = &quot;(\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 ID)&quot;\r\nPrivate Const client_secret As String = &quot;(\u30af\u30e9\u30a4\u30a2\u30f3\u30c8 \u30b7\u30fc\u30af\u30ec\u30c3\u30c8)&quot;\r\n'--------------------------------------------------\r\n\r\nPrivate Const response_type As String = &quot;code&quot;\r\nPrivate Const redirect_uri As String = &quot;urn:ietf:wg:oauth:2.0:oob&quot;\r\nPrivate Const scope As String = &quot;https:\/\/www.googleapis.com\/auth\/gmail.compose&quot;\r\nPrivate Const grant_type As String = &quot;authorization_code&quot;\r\n\r\nPublic Sub Sample()\r\n  SendGmail email, _\r\n            &quot;(To\u30a2\u30c9\u30ec\u30b9)&quot;, _\r\n            &quot;(Cc\u30a2\u30c9\u30ec\u30b9)&quot;, _\r\n            &quot;(Bcc\u30a2\u30c9\u30ec\u30b9)&quot;, _\r\n            &quot;Test&quot;, _\r\n            &quot;\u25a0 \u672c\u6587\u30c6\u30b9\u30c8\uff1a&quot; &amp; vbCrLf &amp; vbCrLf &amp; _\r\n            &quot;\u3042\u3044\u3046\u3048\u304a&quot; &amp; vbCrLf &amp; _\r\n            &quot;\u304b\u304d\u304f\u3051\u3053&quot; &amp; vbCrLf &amp; _\r\n            &quot;\u3055\u3057\u3059\u305b\u305d&quot; &amp; vbCrLf &amp; _\r\n            &quot;\u305f\u3061\u3064\u3066\u3068&quot; &amp; vbCrLf &amp; _\r\n            &quot;\u306a\u306b\u306c\u306d\u306e&quot; &amp; vbCrLf &amp; _\r\n            &quot;\u306f\u3072\u3075\u3078\u307b&quot; &amp; vbCrLf &amp; _\r\n            &quot;\u307e\u307f\u3080\u3081\u3082&quot;, _\r\n            &quot;C:\\Test\\\u30b5\u30f3\u30d7\u30eb.pdf&quot;\r\nEnd Sub\r\n\r\nPrivate Sub SendGmail(ByVal MailFrom As String, _\r\n                      ByVal MailTo As String, _\r\n                      ByVal MailCc As String, _\r\n                      ByVal MailBcc As String, _\r\n                      ByVal MailSubject As String, _\r\n                      ByVal MailBody As String, _\r\n                      Optional ByVal AttachmentFilePath As String = &quot;&quot;)\r\n'Gmail API v1\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\r\n  Dim access_token As String\r\n  Dim mail_dat As String\r\n  Dim raw_dat As String\r\n  Dim dat As Variant\r\n  \r\n  access_token = GetAccessToken\r\n  If Len(Trim(access_token)) &gt; 0 Then\r\n    mail_dat = CreateMailData(MailFrom, _\r\n                              MailTo, _\r\n                              MailCc, _\r\n                              MailBcc, _\r\n                              MailSubject, _\r\n                              MailBody, _\r\n                              AttachmentFilePath)\r\n    raw_dat = EncodeBase64Str(mail_dat)\r\n    dat = &quot;{&quot;&quot;raw&quot;&quot;: &quot;&quot;&quot; &amp; DelBreak(raw_dat) &amp; &quot;&quot;&quot;}&quot;\r\n    With CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;)\r\n      .Open &quot;POST&quot;, &quot;https:\/\/www.googleapis.com\/gmail\/v1\/users\/me\/messages\/send&quot;\r\n      .SetRequestHeader &quot;Content-Type&quot;, &quot;application\/json; charset=UTF-8&quot;\r\n      .SetRequestHeader &quot;Authorization&quot;, &quot;Bearer &quot; &amp; access_token\r\n      .Send dat\r\n      Select Case .Status\r\n        Case 200\r\n          MsgBox &quot;\u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002&quot;, vbInformation + vbSystemModal\r\n        Case Else\r\n          MsgBox &quot;\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002&quot; &amp; vbCrLf &amp; vbCrLf &amp; .responseText, vbCritical + vbSystemModal\r\n      End Select\r\n    End With\r\n  End If\r\nEnd Sub\r\n\r\nPrivate Sub WaitIE(ByRef IEObj As Object)\r\n'\u8868\u793a\u5f85\u3061\r\n  Const READYSTATE_COMPLETE = 4\r\n  While IEObj.Busy Or IEObj.readyState &lt;&gt; READYSTATE_COMPLETE\r\n    DoEvents\r\n  Wend\r\nEnd Sub\r\n\r\nPrivate Function GetAuthorizationCode() As String\r\n'Authorization code\u53d6\u5f97\r\n  Dim ie As Object\r\n  Dim url As String\r\n  Dim ancAcaa As Object\r\n  Dim iptEmail As Object\r\n  Dim iptPasswd As Object\r\n  Dim iptSignIn As Object\r\n  Dim iptCode As Object\r\n  Dim btnApprove As Object\r\n  Dim auth_code As String\r\n  \r\n  '\u521d\u671f\u5316\r\n  Set ancAcaa = Nothing\r\n  Set iptEmail = Nothing\r\n  Set iptPasswd = Nothing\r\n  Set iptSignIn = Nothing\r\n  Set iptCode = Nothing\r\n  Set btnApprove = Nothing\r\n  auth_code = &quot;&quot;\r\n  \r\n  url = &quot;https:\/\/accounts.google.com\/o\/oauth2\/auth?&quot; &amp; _\r\n        &quot;client_id=&quot; &amp; client_id &amp; &quot;&amp;&quot; &amp; _\r\n        &quot;response_type=&quot; &amp; response_type &amp; &quot;&amp;&quot; &amp; _\r\n        &quot;redirect_uri=&quot; &amp; redirect_uri &amp; &quot;&amp;&quot; &amp; _\r\n        &quot;scope=&quot; &amp; EncodeURL(scope)\r\n  \r\n  Set ie = CreateObject(&quot;InternetExplorer.Application&quot;)\r\n  With ie\r\n    .Visible = True\r\n    .Navigate url\r\n    WaitIE ie\r\n    \r\n    '\u8907\u6570\u30a2\u30ab\u30a6\u30f3\u30c8\u5b58\u5728\u6642\u306e\u51e6\u7406\r\n    If InStr(LCase(.document.Location.href), &quot;https:\/\/accounts.google.com\/servicelogin&quot;) Then\r\n      With .document\r\n        On Error Resume Next\r\n        Set ancAcaa = .getElementById(&quot;account-chooser-add-account&quot;)\r\n        On Error GoTo 0\r\n        If Not ancAcaa Is Nothing Then ancAcaa.Click\r\n      End With\r\n      WaitIE ie\r\n    End If\r\n    \r\n    '\u672a\u30ed\u30b0\u30a4\u30f3\u6642\u306e\u30ed\u30b0\u30a4\u30f3\u51e6\u7406\r\n    If InStr(LCase(.document.Location.href), &quot;https:\/\/accounts.google.com\/servicelogin&quot;) Then\r\n      With .document\r\n        On Error Resume Next\r\n        Set iptEmail = .getElementById(&quot;Email&quot;)\r\n        Set iptPasswd = .getElementById(&quot;Passwd&quot;)\r\n        Set iptSignIn = .getElementById(&quot;signIn&quot;)\r\n        On Error GoTo 0\r\n        If Not iptEmail Is Nothing Then iptEmail.Value = email\r\n        If Not iptPasswd Is Nothing Then iptPasswd.Value = passwd\r\n        If Not iptSignIn Is Nothing Then iptSignIn.Click\r\n      End With\r\n      WaitIE ie\r\n    End If\r\n    \r\n    '\u627f\u8a8d\u51e6\u7406\r\n    If InStr(LCase(.document.Location.href), &quot;https:\/\/accounts.google.com\/o\/oauth2\/auth&quot;) Then\r\n      With .document\r\n        On Error Resume Next\r\n        Set btnApprove = .getElementById(&quot;submit_approve_access&quot;)\r\n        On Error GoTo 0\r\n        If Not btnApprove Is Nothing Then\r\n          While btnApprove.disabled &lt;&gt; False\r\n            DoEvents\r\n          Wend\r\n          btnApprove.Click\r\n        End If\r\n      End With\r\n      WaitIE ie\r\n    End If\r\n    \r\n    'Authorization code\u53d6\u5f97\u51e6\u7406\r\n    If InStr(LCase(.document.Location.href), &quot;https:\/\/accounts.google.com\/o\/oauth2\/approval&quot;) Then\r\n      With .document\r\n        On Error Resume Next\r\n        Set iptCode = .getElementById(&quot;code&quot;)\r\n        On Error GoTo 0\r\n        If Not iptCode Is Nothing Then auth_code = iptCode.Value\r\n      End With\r\n      .Navigate &quot;https:\/\/accounts.google.com\/o\/logout&quot; '\u30ed\u30b0\u30a2\u30a6\u30c8\r\n      WaitIE ie\r\n    End If\r\n    .Quit\r\n  End With\r\n  GetAuthorizationCode = auth_code\r\nEnd Function\r\n\r\nPrivate Function GetAccessToken() As String\r\n'Access token\u53d6\u5f97\r\n  Dim auth_code As String\r\n  Dim access_token As String\r\n  Dim json As String\r\n  Dim dat As Variant\r\n  Dim d As Object\r\n  Dim elm As Object\r\n  \r\n  access_token = &quot;&quot; '\u521d\u671f\u5316\r\n  auth_code = GetAuthorizationCode\r\n  If Len(Trim(auth_code)) &gt; 0 Then\r\n    dat = &quot;code=&quot; &amp; auth_code &amp; &quot;&amp;&quot; &amp; _\r\n          &quot;client_id=&quot; &amp; client_id &amp; &quot;&amp;&quot; &amp; _\r\n          &quot;client_secret=&quot; &amp; client_secret &amp; &quot;&amp;&quot; &amp; _\r\n          &quot;redirect_uri=&quot; &amp; redirect_uri &amp; &quot;&amp;&quot; &amp; _\r\n          &quot;grant_type=&quot; &amp; grant_type\r\n    With CreateObject(&quot;WinHttp.WinHttpRequest.5.1&quot;)\r\n      .Open &quot;POST&quot;, &quot;https:\/\/accounts.google.com\/o\/oauth2\/token&quot;\r\n      .SetRequestHeader &quot;Content-Type&quot;, &quot;application\/x-www-form-urlencoded;charset=UTF-8&quot;\r\n      .Send dat\r\n      If .Status = 200 Then\r\n        json = .responseText\r\n        If Len(Trim(json)) &gt; 0 Then\r\n          json = &quot;(&quot; &amp; .responseText &amp; &quot;)&quot;\r\n          Set d = CreateObject(&quot;htmlfile&quot;)\r\n          Set elm = d.createElement(&quot;span&quot;)\r\n          elm.setAttribute &quot;id&quot;, &quot;result&quot;\r\n          d.body.appendChild elm\r\n          d.parentWindow.execScript &quot;document.getElementById('result').innerText=eval(&quot; &amp; json &amp; &quot;).access_token;&quot;\r\n          access_token = elm.innerText\r\n        End If\r\n      End If\r\n    End With\r\n  End If\r\n  GetAccessToken = access_token\r\nEnd Function\r\n\r\nPrivate Function CreateMailData(ByVal MailFrom As String, _\r\n                                ByVal MailTo As String, _\r\n                                ByVal MailCc As String, _\r\n                                ByVal MailBcc As String, _\r\n                                ByVal MailSubject As String, _\r\n                                ByVal MailBody As String, _\r\n                                Optional ByVal AttachmentFilePath As String = &quot;&quot;) As String\r\n'\u30e1\u30fc\u30eb\u30c7\u30fc\u30bf\u4f5c\u6210\r\n  Dim mail_dat As String\r\n  Dim rnd_str As String\r\n  Dim boundary As String\r\n  Dim enc_atch As String\r\n  Dim fso As Object\r\n  \r\n  mail_dat = &quot;&quot;: rnd_str = &quot;&quot;: boundary = &quot;&quot;: enc_atch = &quot;&quot; '\u521d\u671f\u5316\r\n  rnd_str = MakeRndStr(20)\r\n  boundary = &quot;----_&quot; &amp; rnd_str &amp; &quot;_MULTIPART_MIXED_&quot;\r\n  \r\n  mail_dat = &quot;Content-Type: multipart\/mixed;boundary=&quot;&quot;&quot; &amp; boundary &amp; &quot;&quot;&quot;&quot; &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;Content-Transfer-Encoding: base64&quot; &amp; vbCrLf\r\n  'mail_dat = mail_dat &amp; &quot;Content-Transfer-Encoding: UTF-8&quot; &amp; vbCrLf '\u65e5\u672c\u8a9e\u4ef6\u540d\u306e\u5834\u5408\u306a\u305c\u304b\u300cUTF-8\u300d\u3067\u30a8\u30e9\u30fc\u306b\u306a\u3089\u306a\u3044\uff1f\r\n  mail_dat = mail_dat &amp; &quot;From: &quot; &amp; MailFrom &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;To: &quot; &amp; MailTo &amp; vbCrLf\r\n  If Len(Trim(MailCc)) &gt; 0 Then mail_dat = mail_dat &amp; &quot;Cc: &quot; &amp; MailCc &amp; vbCrLf\r\n  If Len(Trim(MailBcc)) &gt; 0 Then mail_dat = mail_dat &amp; &quot;Bcc: &quot; &amp; MailBcc &amp; vbCrLf\r\n  'mail_dat = mail_dat &amp; &quot;Subject: =?UTF-8?B?&quot; &amp; EncodeBase64Str(MailSubject) &amp; &quot;?=&quot; &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;Subject: &quot; &amp; MailSubject &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;MIME-Version: 1.0&quot; &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;Importance: normal&quot; &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;Priority: normal&quot; &amp; vbCrLf &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;--&quot; &amp; boundary &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;Content-Type: text\/plain;charset=&quot;&quot;UTF-8&quot;&quot;&quot; &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; &quot;Content-Transfer-Encoding: base64&quot; &amp; vbCrLf &amp; vbCrLf\r\n  mail_dat = mail_dat &amp; EncodeBase64Str(MailBody) &amp; vbCrLf &amp; vbCrLf\r\n  If Len(Trim(AttachmentFilePath)) &gt; 0 Then\r\n    Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)\r\n    If fso.FileExists(AttachmentFilePath) Then\r\n      enc_atch = EncodeBase64(AttachmentFilePath)\r\n      enc_atch = DelBreak(enc_atch)\r\n      enc_atch = SplitStr(enc_atch, 76)\r\n      mail_dat = mail_dat &amp; &quot;--&quot; &amp; boundary &amp; vbCrLf\r\n      mail_dat = mail_dat &amp; &quot;Content-Type: application\/octet-stream;name=&quot;&quot;&quot; &amp; fso.GetFileName(AttachmentFilePath) &amp; &quot;&quot;&quot;&quot; &amp; vbCrLf\r\n      mail_dat = mail_dat &amp; &quot;Content-Transfer-Encoding: base64&quot; &amp; vbCrLf\r\n      mail_dat = mail_dat &amp; &quot;Content-Disposition: attachment;filename=&quot;&quot;&quot; &amp; fso.GetFileName(AttachmentFilePath) &amp; &quot;&quot;&quot;&quot; &amp; vbCrLf &amp; vbCrLf\r\n      mail_dat = mail_dat &amp; enc_atch &amp; vbCrLf &amp; vbCrLf\r\n    End If\r\n  End If\r\n  mail_dat = mail_dat &amp; &quot;--&quot; &amp; boundary &amp; &quot;--&quot; &amp; vbCrLf\r\n  CreateMailData = mail_dat\r\nEnd Function\r\n\r\nPrivate Function EncodeURL(ByVal str As String) As String\r\n'URL\u30a8\u30f3\u30b3\u30fc\u30c9\r\n  Dim d As Object\r\n  Dim elm As Object\r\n  \r\n  str = Replace(str, &quot;\\&quot;, &quot;\\\\&quot;)\r\n  str = Replace(str, &quot;'&quot;, &quot;\\'&quot;)\r\n  Set d = CreateObject(&quot;htmlfile&quot;)\r\n  Set elm = d.createElement(&quot;span&quot;)\r\n  elm.setAttribute &quot;id&quot;, &quot;result&quot;\r\n  d.body.appendChild elm\r\n  d.parentWindow.execScript &quot;document.getElementById('result').innerText = encodeURIComponent('&quot; &amp; str &amp; &quot;');&quot;, &quot;JScript&quot;\r\n  EncodeURL = elm.innerText\r\nEnd Function\r\n\r\nPrivate Function EncodeBase64(ByVal file_path As String) As String\r\n'\u30d5\u30a1\u30a4\u30eb\u3092Base64\u30a8\u30f3\u30b3\u30fc\u30c9\r\n  Dim elm As Object\r\n  Dim ret As String\r\n  Const adTypeBinary = 1\r\n  Const adReadAll = -1\r\n  \r\n  ret = &quot;&quot; '\u521d\u671f\u5316\r\n  On Error Resume Next\r\n  Set elm = CreateObject(&quot;MSXML2.DOMDocument&quot;).createElement(&quot;base64&quot;)\r\n  With CreateObject(&quot;ADODB.Stream&quot;)\r\n    .Type = adTypeBinary\r\n    .Open\r\n    .LoadFromFile file_path\r\n    elm.DataType = &quot;bin.base64&quot;\r\n    elm.nodeTypedValue = .Read(adReadAll)\r\n    ret = elm.Text\r\n    .Close\r\n  End With\r\n  On Error GoTo 0\r\n  EncodeBase64 = ret\r\nEnd Function\r\n\r\nPrivate Function EncodeBase64Str(ByVal str As String) As String\r\n'\u6587\u5b57\u5217\u3092Base64\u30a8\u30f3\u30b3\u30fc\u30c9\r\n  Dim ret As String\r\n  Dim d() As Byte\r\n  \r\n  Const adTypeBinary = 1\r\n  Const adTypeText = 2\r\n  \r\n  ret = &quot;&quot; '\u521d\u671f\u5316\r\n  On Error Resume Next\r\n  With CreateObject(&quot;ADODB.Stream&quot;)\r\n    .Open\r\n    .Type = adTypeText\r\n    .Charset = &quot;UTF-8&quot;\r\n    .WriteText str\r\n    .Position = 0\r\n    .Type = adTypeBinary\r\n    .Position = 3\r\n    d = .Read()\r\n    .Close\r\n  End With\r\n  With CreateObject(&quot;MSXML2.DOMDocument&quot;).createElement(&quot;base64&quot;)\r\n    .DataType = &quot;bin.base64&quot;\r\n    .nodeTypedValue = d\r\n    ret = .Text\r\n  End With\r\n  On Error GoTo 0\r\n  EncodeBase64Str = ret\r\nEnd Function\r\n\r\nPrivate Function DelBreak(ByVal str As String) As String\r\n'\u6539\u884c\u524a\u9664\r\n  Dim ret As String\r\n  \r\n  ret = &quot;&quot; '\u521d\u671f\u5316\r\n  ret = Replace(str, vbNewLine, &quot;&quot;)\r\n  ret = Replace(ret, vbCr, &quot;&quot;)\r\n  ret = Replace(ret, vbLf, &quot;&quot;)\r\n  DelBreak = ret\r\nEnd Function\r\n\r\nPrivate Function SplitStr(ByVal str As String, ByVal num As Long) As String\r\n'\u6587\u5b57\u5217\u3092\u6307\u5b9a\u3057\u305f\u6587\u5b57\u6570\u3067\u5206\u5272\u30fb\u7d50\u5408\r\n  Dim ret As String\r\n  Dim i As Long\r\n  \r\n  ret = &quot;&quot; '\u521d\u671f\u5316\r\n  For i = 1 To Len(str) Step num\r\n    If i = 1 Then\r\n      ret = Mid(str, i, num)\r\n    Else\r\n      ret = ret &amp; vbCrLf &amp; Mid(str, i, num)\r\n    End If\r\n  Next\r\n  SplitStr = ret\r\nEnd Function\r\n\r\nPrivate Function MakeRndStr(ByVal num As Long) As String\r\n'0-9,A-Z\u307e\u3067\u306e\u30e9\u30f3\u30c0\u30e0\u306a\u6587\u5b57\u5217\u3092\u751f\u6210\r\n  Dim ret As String\r\n  Dim n As Long\r\n  \r\n  ret = &quot;&quot; '\u521d\u671f\u5316\r\n  Do\r\n    n = RndScope(48, 90)\r\n    Select Case n\r\n      Case 58 To 64\r\n      Case Else\r\n        ret = ret &amp; ChrW(n)\r\n    End Select\r\n  Loop Until Len(ret) = num\r\n  MakeRndStr = ret\r\nEnd Function\r\n\r\nPrivate Function RndScope(ByVal num_min As Long, num_max As Long) As Long\r\n'\u6307\u5b9a\u3057\u305f\u7bc4\u56f2\u306e\u4e71\u6570\u3092\u751f\u6210\r\n  Dim ret As Long\r\n  \r\n  Randomize\r\n  ret = Int(Rnd() * (num_max - num_min + 1) + num_min)\r\n  RndScope = ret\r\nEnd Function<\/pre>\n<p><a href=\"\/\/www.ka-net.org\/blog\/wp-content\/uploads\/GmailAPI_03_01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"\/\/www.ka-net.org\/blog\/wp-content\/uploads\/GmailAPI_03_01.png\" alt=\"GmailAPI_03_01\" width=\"571\" height=\"583\" class=\"alignnone size-full wp-image-4546\" srcset=\"https:\/\/www.ka-net.org\/blog\/wp-content\/uploads\/GmailAPI_03_01.png 571w, https:\/\/www.ka-net.org\/blog\/wp-content\/uploads\/GmailAPI_03_01-293x300.png 293w, https:\/\/www.ka-net.org\/blog\/wp-content\/uploads\/GmailAPI_03_01-64x64.png 64w\" sizes=\"auto, (max-width: 571px) 100vw, 571px\" \/><\/a><\/p>\n<p>\u4e0a\u8a18\u30b3\u30fc\u30c9\u3001\u4e0a\u306b\u3082\u66f8\u3044\u305f\u901a\u308a\u3001\u65e5\u672c\u8a9e\u306e\u4ef6\u540d\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\u3002<br \/>\n\u300c<span style=\"color: #ff0000; font-weight: bold;\">=?UTF-8?B?(\u7565)?=<\/span>\u300d\u306e\u3088\u3046\u306b\u3057\u3066\u3001\u554f\u984c\u7121\u304f\u9001\u4fe1\u3067\u304d\u308b\u5834\u5408\u3082\u3042\u308c\u3070\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u5834\u5408\u3082\u3042\u308a\u3001\u540c\u3058\u4ef6\u540d\u3067\u3082\u30a8\u30e9\u30fc\u304c\u8d77\u304d\u305f\u308a\u8d77\u304d\u306a\u304b\u3063\u305f\u308a\u3001\u300c<span style=\"color: #ff0000; font-weight: bold;\">Content-Transfer-Encoding: UTF-8<\/span>\u300d\u306a\u3093\u3066\u3044\u3046\u8b0e\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u5165\u308c\u305f\u3089\u30a8\u30e9\u30fc\u304c\u8d77\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3068\u3001\u3068\u306b\u304b\u304f\u6319\u52d5\u304c\u304a\u304b\u3057\u304b\u3063\u305f\u306e\u3067\u3001\u7d50\u5c40\u6700\u5f8c\u306f\u201c<span style=\"color: #ff0000; font-weight: bold;\">\u4ef6\u540d\u306b\u306f\u65e5\u672c\u8a9e\u3092\u4f7f\u308f\u306a\u3044<\/span>\u201d\u3001\u3068\u3044\u3046\u3068\u3053\u308d\u306b\u843d\u3061\u7740\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>API\u5074\u304c\u8fd4\u3059\u30a8\u30e9\u30fc\u3082\u300c<span style=\"color: #ff0000; font-weight: bold;\">Invalid value for ByteString<\/span>\u300d\u3060\u3051\u3067\u3001\u6b63\u76f4\u3069\u3053\u306b\u3069\u3093\u306a\u554f\u984c\u304c\u3042\u308b\u306e\u304b\u5206\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u30fb\u30fb\u30fb\u3002<\/p>\n<h4>\u25a0 \u95a2\u9023Web\u30da\u30fc\u30b8<\/h4>\n<p><strong>\u30fbGmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed<\/strong><br \/>\n<a href=\"\/\/www.ka-net.org\/blog\/?p=4524\" title=\"Gmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed\" target=\"_blank\" rel=\"noopener\">\/\/www.ka-net.org\/blog\/?p=4524<\/a><br \/>\n<strong>\u30fbGmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed(2)<\/strong><br \/>\n<a href=\"\/\/www.ka-net.org\/blog\/?p=4538\" title=\"Gmail API\u3092\u4f7f\u3063\u3066\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308bVBA\u30de\u30af\u30ed(2)\" target=\"_blank\" rel=\"noopener\">\/\/www.ka-net.org\/blog\/?p=4538<\/a><\/p>\n<h4>\u25a0 \u3042\u3068\u304c\u304d<\/h4>\n<p>\u6700\u521d\u306f\u30e1\u30fc\u30eb\u30c7\u30fc\u30bf\u306e\u4f5c\u6210\u306bCDO\u3092\u4f7f\u304a\u3046\u3068\u3057\u307e\u3057\u305f\u304c\u3001CDO\u3067\u4f5c\u6210\u3057\u305f\u30c7\u30fc\u30bf\u3060\u3068\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u300c<span style=\"color: #ff0000; font-weight: bold;\">&lt;&gt;<\/span>\u300d\u3067\u30a8\u30e9\u30fc\u306b\u306a\u3063\u305f\u308a\u3068\u3001\u554f\u984c\u304c\u304b\u306a\u308a\u591a\u304b\u3063\u305f\u306e\u3067\u3001\u7d50\u5c40\u5168\u3066\u81ea\u5206\u3067\u66f8\u304f\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\u30fb\u30fb\u30fb\u3002<br \/>\n\u53b3\u5bc6\u306bRFC 822\u306b\u5f93\u3063\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u3053\u308c\u4ee5\u4e0a\u3084\u3063\u3066\u3044\u3089\u308c\u306a\u3044\u306e\u3067\u3001\u3068\u308a\u3042\u3048\u305a\u306f\u3053\u308c\u3067\u826f\u3057\u3068\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"\u524d\u56de\u3001\u524d\u3005\u56de\u3068Gmail API\u3092\u6271\u3063\u3066\u304d\u307e\u3057\u305f\u304c\u3001\u4eca\u56de\u306f\u524d\u3005\u56de\u306e\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u30b3\u30fc\u30c9\u3092\u6539\u4fee\u3057\u3066\u3001\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb\uff0664\u30d3\u30c3\u30c8\u7248Office\u306b\u5bfe\u5fdc\u3057\u305f\u30b3\u30fc\u30c9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002 \u203b \u4e0b\u8a18\u30b3\u30fc\u30c9\u306f\u65e5\u672c\u8a9e\u672c\u6587\u306b\u306f\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4ef6\u540d [&hellip;]","protected":false},"author":1,"featured_media":7111,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4,48,49,126],"tags":[],"class_list":["post-4545","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-office","category-excel-office","category-word-office","category-google"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.ka-net.org\/blog\/wp-content\/uploads\/eyecatch-Excel.png","jetpack_shortlink":"https:\/\/wp.me\/p4UZZr-1bj","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4545"}],"version-history":[{"count":2,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4545\/revisions"}],"predecessor-version":[{"id":14216,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4545\/revisions\/14216"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=\/wp\/v2\/media\/7111"}],"wp:attachment":[{"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4545"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4545"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ka-net.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}