VB.NET發送郵件給OUTLOOK.COM的用戶,用OUTLOOK.COM郵箱賬號登錄給別人發郵件

在VB.NET中通過代碼發送郵件時,確實會遇到郵箱服務的身份認證(Authentication)要求。特別是微軟Outlook/Hotmail等服務,已經逐步禁用傳統的“基本身份驗證”(Basic Authentication),轉而強制要求使用更安全的?OAuth 2.0 認證

下面我將為你說明如何處理身份認證問題,并提供代碼示例。

?? 重要提醒:認證方式的變化

微軟已多次宣布并推遲禁用基本身份驗證的時間線。根據我目前看到的信息,最新的計劃是:

  • 2026年3月1日開始逐步淘汰通過SMTP AUTH發送電子郵件的基本身份驗證。

  • 2026年4月30日預計將完全停用此方法9。
    盡管目前基本認證可能仍有效,但從長遠和穩定的角度出發,強烈建議為新項目或重要應用直接采用OAuth 2.0認證

下面的表格匯總了不同郵箱類型推薦使用的認證方式和關鍵參數:

郵箱類型推薦認證方式SMTP 服務器端口 (推薦)加密方式注意事項
Outlook/HotmailOAuth 2.0smtp.office365.com587STARTTLS需在Azure AD注冊應用并配置權限。未來必須使用OAuth19。
基本認證 (過渡)smtp.office365.com587STARTTLS目前可能有效,但會被逐步淘汰。需在賬戶設置中啟用SMTP認證并可能使用應用密碼。
QQ郵箱基本認證 (應用密碼)smtp.qq.com465 或 587SSL 或 STARTTLS需在郵箱設置中開啟SMTP服務并獲取授權碼(即應用密碼),不要在代碼中直接使用你的QQ密碼。
163郵箱基本認證 (應用密碼)smtp.163.com465 或 994SSL需在郵箱設置中開啟SMTP服務并獲取授權碼(即應用密碼),不要在代碼中直接使用你的郵箱密碼。

下面是針對不同認證方式的代碼示例。

🔐 方法一:使用 OAuth 2.0 認證 (Outlook/Hotmail 推薦)

這是微軟推薦的、面向未來的方式,但設置相對復雜。

前期準備(在Azure Portal中配置):
  1. 注冊應用程序:訪問 Azure Portal (https://portal.azure.com),在“Azure?Active Directory”中注冊一個新應用程序。

  2. 添加客戶端密碼:在應用的“證書和密碼”部分,創建一個新的客戶端密碼,并妥善保存其(稍后代碼中會用到)。

  3. 配置API權限:在應用的“API權限”中,添加?SMTP.Send?權限(屬于?Office 365 Exchange Online),并代表你的組織授予管理員同意

VB.NET 代碼示例 (使用 MailKit 庫)

.NET Framework 內置的?SmtpClient?對 OAuth 2.0 的支持不佳,推薦使用更現代且支持更好的?MailKit?庫。你可以通過NuGet包管理器安裝?MailKit?和?MimeKit


Imports MailKit.Net.Smtp
Imports MailKit.Security
Imports MimeKit
Imports System.Threading' 注意:此示例需要安裝 MailKit 和 MimeKit NuGet 包。
Public Async Function SendEmailViaOAuthAsync() As TaskDim message As New MimeMessage()message.From.Add(New MailboxAddress("你的名字", "your_email@outlook.com")) ' 你的Outlook郵箱message.To.Add(New MailboxAddress("收件人名字", "recipient@example.com")) ' 收件人郵箱message.Subject = "這是一封測試郵件"message.Body = New TextPart("plain") With {.Text = "這是一封使用VB.NET和OAuth 2.0發送的測試郵件。"}Using client As New MailKit.Net.Smtp.SmtpClient()Try' 連接到Outlook SMTP服務器Await client.ConnectAsync("smtp.office365.com", 587, SecureSocketOptions.StartTls)' 請注意:這里的密碼是你在Azure應用中創建的“客戶端密碼”,不是你的郵箱密碼!Dim oauth2 As New SaslMechanismOAuth2("your_email@outlook.com", "你的客戶端密碼")' 進行OAuth 2.0認證Await client.AuthenticateAsync(oauth2)' 發送郵件Await client.SendAsync(message)Console.WriteLine("郵件發送成功!")Catch ex As ExceptionConsole.WriteLine("發送失敗: " & ex.ToString())FinallyAwait client.DisconnectAsync(True)End TryEnd Using
End Function

🔓 方法二:使用基本認證 (傳統方式,可能逐步淘汰)

對于QQ、163等郵箱,目前通常仍使用基本認證,但需使用應用專用密碼(授權碼)。對于Outlook/Hotmail,此方式未來會失效。

VB.NET 代碼示例 (使用 System.Net.Mail.SmtpClient)
Imports System.Net.Mail
Imports System.NetPublic Sub SendEmailViaBasicAuth()Using smtpClient As New SmtpClient("smtp.office365.com") ' 對于Outlook。QQ郵箱用 "smtp.qq.com", 163郵箱用 "smtp.163.com"smtpClient.Port = 587 ' Outlook端口。QQ也可用587或465,163常用465或994smtpClient.Credentials = New NetworkCredential("your_email@outlook.com", "你的密碼或授權碼") ' 對于Outlook,如果開啟了雙因素認證,這里可能需要應用密碼。對于QQ/163,此處填授權碼。smtpClient.EnableSsl = True ' 啟用加密連接。對于端口465,有時可能需要其他配置。Dim mailMessage As New MailMessage()mailMessage.From = New MailAddress("your_email@outlook.com")mailMessage.To.Add("recipient@example.com")mailMessage.Subject = "VB.NET 基本認證測試"mailMessage.Body = "這是一封使用基本認證發送的測試郵件。"TrysmtpClient.Send(mailMessage)Console.WriteLine("郵件發送成功!")Catch ex As ExceptionConsole.WriteLine("發送失敗: " & ex.ToString())End TryEnd Using
End Sub

?? 發送郵件時的其他注意事項

除了認證方式,以下幾點也需要留意:

  • 端口與加密:不同的郵箱服務商可能支持不同的端口和加密方式(SSL/TLS)。如果默認端口不行,可以嘗試其他常用端口。

  • 授權碼/應用密碼:對于QQ、163等郵箱,為了安全,務必在郵箱設置中開啟SMTP服務并獲取專用的授權碼,不要在代碼中直接使用你的郵箱登錄密碼。

  • 服務器限制:免費郵箱通常對每日發信數量、頻率有限制,大量發送需注意。

  • 垃圾郵件風險:注意郵件內容格式,避免被收件方服務器誤判為垃圾郵件。對于大批量發件人,微軟等提供商還要求配置SPF、DKIM、DMARC等記錄以提高發信信譽和成功率7。

💎 總結與建議

在VB.NET中發送郵件,處理認證的關鍵是:

  1. 認清郵箱類型:確認你使用的是Outlook/Hotmail還是國內郵箱(QQ、163)。

  2. 選擇認證方式

    • Outlook/Hotmail首選 OAuth 2.0(盡管設置稍復雜,但一勞永逸)。暫時可測試基本認證,但需知它終將失效。

    • QQ/163等國內郵箱:使用基本認證,但密碼處填寫你在郵箱設置中獲取的授權碼

  3. 使用合適的庫和參數:對于OAuth 2.0,推薦使用?MailKit?庫。對于基本認證,System.Net.Mail.SmtpClient?基本夠用,但請注意微軟也已建議使用?MailKit?等替代方案。

希望這些信息能幫助你順利地在VB.NET中實現郵件發送功能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96318.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【網絡運維】Shell:變量進階知識

Shell 變量進階知識 Shell 中的特殊變量 位置參數變量 Shell 腳本中常用的位置參數變量如下: $0:獲取當前執行的 Shell 腳本文件名(包含路徑時包括路徑)$n:獲取第 n 個參數值(n>9 時需使用 ${n}&#xf…

部署Qwen2.5-VL-7B-Instruct-GPTQ-Int3

模型下載 from modelscope import snapshot_download model_dir snapshot_download(ChineseAlpacaGroup/Qwen2.5-VL-7B-Instruct-GPTQ-Int3)相關包導入 import os import numpy as np import pandas as pd from tqdm import tqdm from datetime import datetime,timedelta fro…

sourcetree 拉取代碼

提示:文章旨在于教授大家 sourcetree 拉取代碼的方式,關于代碼的提交合并等操作后續會補充。 文章目錄前言一、sourcetree 安裝二、http 與 ssh 拉取代碼1.http 方式(1)生成 token(2)拼接項目的 url&#x…

epoll模型網絡編程知識要領

1、程序初始化創建監聽socket調用bind函數綁定ip地址、port端口號調用listen函數監聽調用epoll_create函數創建epollfd調用epoll_ctrl函數將listenfd綁定到epollfd上,監測listenfd的讀事件在一個無限循環中,調用epoll_wait函數等待事件發生2、處理客戶端…

15-day12LLM結構變化、位置編碼和投機采樣

多頭機制transformer結構歸一化層選擇 歸一化層位置歸一化層類型激活函數Llama2結構MoE架構 混合專家模型DeepSeek MLA為何需要位置編碼目前的主流位置編碼正余弦位置編碼可學習位置編碼ROPE旋轉位置編碼推導參考: https://spaces.ac.cn/archives/8265 https://zhua…

記錄 docker容器打包成鏡像 在其他服務器快速啟動鏡像和容器

我有個nginx服務器 需要在其他服務器直接部署使用 里面都是完整的 使用 docker ps 查看容器id 進行打包成鏡像docker commit [容器ID或名稱] 新鏡像名:版本 docker commit 28f60e2206b2 my-nginx-custom:v1鏡像保存成文件 docker save -o my-nginx-custom.tar my-nginx-custom:…

使用LLaMA-Factory對大模型進行微調-詳解

書接上回 啟動llama Factory可視化頁面 llamafactory-cli webui 如果想后臺運行 使用 nohup llamafactory-cli webui &瀏覽器訪問 http://127.0.0.1:7860/配置項主要參數: 參考: https://docs.coreshub.cn/console/compute_platform/help/llama_factory/ 模型路徑 : 解…

【AI】錄制自動生成UI自動化腳本

命令行輸入:npx playwright codegen https://myerp.dmyc.XXX.com:9443/打開的瀏覽器上操作,會自動錄制,并生成自動化腳本

深度剖析字節跳動VeOmni框架

背景與設計動機 隨著推薦系統和AI模型走向多模態、多任務的趨勢,字節跳動面臨著訓練、迭代效率和系統復雜度的雙重挑戰。一方面,各類業務(如新聞推薦、短視頻、圖文廣告、電商帶貨等)都需要處理文本、圖像、視頻、音頻等多種輸入模…

OCR庫pytesseract安裝保姆級教程

本文將介紹使用工具安裝OCR庫pytesseract的詳細流程。 Anaconda安裝教程參考Anaconda安裝保姆級教程。 目錄 一、工具安裝 二、創建虛擬環境 三、安裝pytesseract 總結 一、工具安裝 點擊鏈接前往官網codetou.com,下載安裝最新版即可,本篇博客以摳頭…

開源im即時通訊軟件開發社交系統全解析:安全可控、功能全面的社交解決方案

在即時通訊與社交需求日益增長的今天,一款安全、穩定、功能全面的聊天軟件成為不少團隊和開發者的剛需。但市面上多數聊天 APP 要么依賴第三方插件,面臨數據安全隱患和高額服務費;要么功能單一,難以滿足復雜社交場景。今天給大家推…

殘差神經網絡(ResNet)

殘差神經網絡(Residual Neural Network,簡稱 ResNet)是深度學習領域的里程碑式模型,由何凱明等人在 2015 年提出,成功解決了深層神經網絡訓練中的梯度消失 / 爆炸問題,使訓練超深網絡(如 152 層…

學習嵌入式之驅動

一、基礎搭建1.基礎:c語言 軟件編程語言 數據結構 軟件編程思想2.驅動實現目標如果將Linux系統細致到開發板平臺上? Liunx系統與硬件設備的適配3.自我能力的鍛煉繼續強化C語言鍛煉大型代碼閱讀和分析能力學習大型項目的代碼搭建和管理的能力…

在 Golang 中復用 HTTP 連接

問題提出最近在實現一個轉發大模型調用請求的中轉功能,涉及到要構造client發送請求的內容,一開始我每次都是新建一個client來發送請求,這樣的代碼實現存在一些問題——每次都要構造新的client,并且要重新建立連接。后面了解到在Go…

前端:el-upload文件上傳與FormData 對象

<el-uploadclass"uploadDemo":limit"1"dragaccept".xls,.xlsx" <!-- 只保留Excel格式 -->:on-exceed"handleExceedFileLimit":on-change"handleChangeExcelFile":on-remove"handleRemoveExcelFile":bef…

自然處理語言NLP:One-Hot編碼、TF-IDF、詞向量、NLP特征輸入、EmbeddingLayer實現、word2vec

文章目錄自然語言處理&#xff08;NLP&#xff09;一、什么是自然語言處理&#xff08;NLP&#xff09;&#xff1f;二、NLP 的核心目標三、NLP 的主要應用方向&#xff08;應用場景&#xff09;四、NLP 的基本概念五、NLP 的基本處理流程1. 文本預處理2. 特征表示3. 模型選擇與…

單詞記憶-輕松記憶10個實用英語單詞(13)

1. board含義&#xff1a;板子&#xff1b;董事會&#xff1b;登機 讀音標注&#xff1a;/b??rd/ 例句&#xff1a;Write your name on the board. 譯文&#xff1a;把你的名字寫在板上。 衍生含義&#xff1a;董事會&#xff08;如“board of directors”&#xff09;&#…

Spring循環依賴源碼調試詳解,用兩級緩存代替三級緩存

Spring循環依賴源碼詳解&#xff0c;改用兩級緩存并實驗 背景 最近一直在研究Spring的循環依賴&#xff0c;發現好像兩級緩存也能解決循環依賴。 關于為何使用三級緩存&#xff0c;大致有兩個原因 對于AOP的類型&#xff0c;保證Bean生命周期的順序 對于有AOP代理增強的類型&am…

亞馬遜BALL PIT球池外觀專利侵權指控?不侵權意見書助力4條鏈接申訴成功!

兒童球池作為玩具品類中常見的一款產品&#xff0c;能夠給兒童提供游樂的安全空間&#xff0c;深受亞馬遜平臺用戶的喜愛。然而在近期&#xff0c;賽貝收到了部分亞馬遜賣家的咨詢&#xff0c;原因是他們在售的兒童球池產品鏈接被美國外觀專利USD1009203S&#xff08;下稱203專…

開源,LangExtract-Python庫用LLM從非結構化文本提取結構化信息

摘要&#xff1a; LangExtract是一個Python庫&#xff0c;利用大語言模型&#xff08;LLM&#xff09;根據用戶定義指令從非結構化文本文檔中提取結構化信息。它具備精確源定位、可靠結構化輸出、長文檔優化、交互式可視化、靈活LLM支持、適應任意領域等特點。可通過幾行代碼快…