最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust使用lettre實現(xiàn)郵件發(fā)送功能

 更新時間:2024年11月11日 09:39:28   作者:cci  
這篇文章主要為大家詳細介紹了Rust如何使用lettre實現(xiàn)郵件發(fā)送功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

POP、IMAP、SMTP是什么

  • POP(Post Office Protocol):,用于客戶端從郵件服務(wù)器上下載電子郵件。它允許用戶將郵件服務(wù)器上的郵件檢索到本地設(shè)備(如個人電腦、手機等)進行閱讀、處理等操作
  • IMAP(Internet Mail Access Protocol):交互式郵件存取協(xié)議,用于客戶端訪問郵件服務(wù)器上的郵件,但與 POP 不同的是,用戶可以通過 IMAP 協(xié)議在客戶端上對郵件服務(wù)器上的郵件進行各種操作,如閱讀、移動、刪除、標記等,始終保持郵件存儲在服務(wù)器上,用戶可以從任何支持 IMAP 的設(shè)備訪問和管理郵件
  • SMTP(Simple Mail Transfer Protocol):簡單郵件傳輸協(xié)議,負責(zé)將郵件從發(fā)件人的郵件客戶端(如 Outlook、Thunderbird 等)或者郵件發(fā)送服務(wù)器(如本案例)傳輸?shù)绞占说泥]件服務(wù)器

這里使用SMTP發(fā)送郵件,所以要開啟SMTP,由于outlook需要付費,這里使用qq郵箱

生成授權(quán)碼,這個授權(quán)碼就是郵件發(fā)送者的密碼

1、添加crate

lettre = "0.11"

2、創(chuàng)建郵件對象和郵件發(fā)送者

同步發(fā)送,會阻塞代碼

use lettre::{
    message::header::ContentType,
    transport::smtp::authentication::Credentials,
    Message,
    SmtpTransport,
    Transport,
};
async fn main() {
    //  創(chuàng)建郵件對象
    let email = Message::builder()
        // 設(shè)置郵件的發(fā)件人地址
        .from("xxxxxxx@qq.com".parse().unwrap())
        // 設(shè)置郵件的回復(fù)地址
        .reply_to("xxxxxx@qq.com".parse().unwrap())
        // 設(shè)置郵件的收件人地址
        .to("xxxxxx@gmail.com".parse().unwrap())
        // 設(shè)置郵件的主題
        .subject("銹化動力商城驗證碼")
        // 設(shè)置郵件的內(nèi)容類型為純文本
        .header(ContentType::TEXT_PLAIN)
        // 設(shè)置郵件的正文內(nèi)容
        .body(String::from("驗證碼為:123456"))
        .unwrap();
    //  創(chuàng)建郵件發(fā)送者,第一個參數(shù)是郵件發(fā)送者賬號,第二個參數(shù)是郵件發(fā)送者密碼,這里使用授權(quán)碼
    let creds = Credentials::new("xxxx@qq.com".to_owned(), "password".to_owned());

    // 使用ssl打開mail遠程鏈接,填寫發(fā)送郵件服務(wù)器地址,端口為465或587
    let mailer = SmtpTransport::starttls_relay("smtp.qq.com")
        .unwrap()
        .credentials(creds)
        .port(587)
        .build();
    // 發(fā)送郵件
    match mailer.send(&email) {
        Ok(_) => println!("Email sent successfully!"),
        Err(e) => println!("Could not send email: {e:?}"),
    }
}

異步發(fā)送,不會阻塞代碼 Cargo.toml配置

tokio = { version = "1", features = ["full"] }
lettre = { version = "0.11.7", features = ["tokio1-native-tls", "builder"] }

代碼

use lettre::{
    AsyncSmtpTransport, AsyncTransport, Message,
    message::header::ContentType, Tokio1Executor, transport::smtp::authentication::Credentials,
};

#[tokio::main]
async fn main() {
    //  創(chuàng)建郵件對象
    let email = Message::builder()
        // 設(shè)置郵件的發(fā)件人地址
        .from("xxxxx@qq.com".parse().unwrap())
        // 設(shè)置郵件的回復(fù)地址
        .reply_to("xxxx@qq.com".parse().unwrap())
        // 設(shè)置郵件的收件人地址
        .to("xxxx@gmail.com".parse().unwrap())
        // 設(shè)置郵件的主題
        .subject("銹化動力商城驗證碼")
        // 設(shè)置郵件的內(nèi)容類型為純文本
        .header(ContentType::TEXT_PLAIN)
        // 設(shè)置郵件的正文內(nèi)容
        .body(String::from("驗證碼為:123456"))
        .unwrap();
    //  創(chuàng)建郵件發(fā)送者,第一個參數(shù)是郵件發(fā)送者賬號,第二個參數(shù)是郵件發(fā)送者密碼,這里使用授權(quán)碼
    let creds = Credentials::new("xxxxx@qq.com".to_owned(), "password".to_owned());

    // 使用ssl打開mail遠程鏈接,填寫發(fā)送郵件服務(wù)器地址,端口為465或587
    let mailer: AsyncSmtpTransport<Tokio1Executor> = AsyncSmtpTransport::<Tokio1Executor>
    ::starttls_relay("smtp.qq.com")
        .unwrap()
        .credentials(creds)
        .port(587)
        .build();
    match mailer.send(email).await {
        Ok(_) => println!("Email sent successfully!"),
        Err(e) => println!("Could not send email: {e:?}"),
    }
}

效果

實際生產(chǎn)請將unwrap()替換為?傳遞錯誤或其他錯誤處理方式,使用郵件進行注冊登陸時可以生成的驗證碼往redis里寫一份,key設(shè)置為郵件名,設(shè)置過期時間為60s,注冊登陸時與redis中的驗證碼比較即可

到此這篇關(guān)于Rust使用lettre實現(xiàn)郵件發(fā)送功能的文章就介紹到這了,更多相關(guān)Rust lettre郵件發(fā)送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 2022最新Rust變量與數(shù)據(jù)類型講解

    2022最新Rust變量與數(shù)據(jù)類型講解

    rust 是強類型語言所有變量、常量都必須有明確的數(shù)據(jù)類型,這篇文章主要介紹了Rust變量與數(shù)據(jù)類型,需要的朋友可以參考下
    2022-11-11
  • 基于Rust構(gòu)建一個Git提交歷史可視化工具

    基于Rust構(gòu)建一個Git提交歷史可視化工具

    在軟件開發(fā)中,版本控制系統(tǒng)的歷史記錄往往承載著項目的演進脈絡(luò),本文主要介紹了如何基于Rust構(gòu)建一個Git提交歷史可視化工具,感興趣的小伙伴可以了解下
    2025-11-11
  • Rust中泛型的學(xué)習(xí)筆記

    Rust中泛型的學(xué)習(xí)筆記

    在Rust語言中,泛型是一種強大的工具,它允許我們編寫可復(fù)用且靈活的代碼,本文主要介紹了Rust中泛型的學(xué)習(xí)筆記,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 從迷你todo?命令行入門Rust示例詳解

    從迷你todo?命令行入門Rust示例詳解

    這篇文章主要為大家介紹了從一個迷你todo命令行入門Rust的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Rust 智能指針的使用詳解

    Rust 智能指針的使用詳解

    Rust智能指針是內(nèi)存管理核心工具,本文就來詳細的介紹一下Rust智能指針(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理與使用場景,感興趣的可以了解一下
    2025-09-09
  • 深入解析Rust中的智能指針

    深入解析Rust中的智能指針

    本文介紹了Rust中的智能指針,Box、Rc、Arc、RefCell、Mutex、RwLock對應(yīng)的功能、場景與常用方法,并提供了組合使用方式,以及Cow、Pin的使用方式,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • 詳解Rust中泛型的使用

    詳解Rust中泛型的使用

    泛型是一種在編寫代碼時不指定具體類型,而在使用時再確定類型的編程技巧,本文將詳細介紹?Rust?中泛型的相關(guān)概念和用法,希望對大家有所幫助
    2023-06-06
  • Rust時間庫Chrono最佳使用實踐

    Rust時間庫Chrono最佳使用實踐

    本文介紹了Rust中常用的日期時間處理庫chrono,對比了標準庫std::time和chrono的功能和適用場景,并詳細講解了chrono的核心數(shù)據(jù)類型、主要操作、進階功能以及最佳實踐,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Rust 高性能內(nèi)存緩存 moka 完全指南

    Rust 高性能內(nèi)存緩存 moka 完全指南

    本文介紹了Rust高性能內(nèi)存緩存庫moka,涵蓋其核心特性、基礎(chǔ)環(huán)境搭建、同步/異步實戰(zhàn)、高級配置及生產(chǎn)環(huán)境最佳實踐等內(nèi)容,感興趣的可以了解一下
    2026-05-05
  • 詳解Rust調(diào)用tree-sitter支持自定義語言解析

    詳解Rust調(diào)用tree-sitter支持自定義語言解析

    使用Rust語言結(jié)合tree-sitter庫解析自定義語言需要定義語法、生成C解析器,并在Rust項目中集成,具體步驟包括創(chuàng)建grammar.js定義語法,使用tree-sitter-cli工具生成C解析器,以及在Rust項目中編寫代碼調(diào)用解析器,這一過程涉及到對tree-sitter的深入理解和Rust語言的應(yīng)用技巧
    2024-09-09

最新評論

临西县| 栖霞市| 诸城市| 盐边县| 紫阳县| 桐庐县| 新巴尔虎左旗| 海口市| 北海市| 宝应县| 翼城县| 武威市| 江油市| 肇州县| 崇信县| 鱼台县| 株洲县| 福州市| 荥经县| 廉江市| 舟山市| 成武县| 大厂| 新闻| 兴安县| 孙吴县| 江孜县| 望都县| 工布江达县| 盈江县| 喀什市| 凤城市| 冷水江市| 拉孜县| 毕节市| 大方县| 阿城市| 抚远县| 舟山市| 肥东县| 四子王旗|