欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

POP、IMAP、SMTP是什么

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

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

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

1、添加crate

lettre = "0.11"

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

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

use lettre::{
    message::header::ContentType,
    transport::smtp::authentication::Credentials,
    Message,
    SmtpTransport,
    Transport,
};
async fn main() {
    //  創(chuàng)建郵件對(duì)象
    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("銹化動(dòng)力商城驗(yàn)證碼")
        // 設(shè)置郵件的內(nèi)容類型為純文本
        .header(ContentType::TEXT_PLAIN)
        // 設(shè)置郵件的正文內(nèi)容
        .body(String::from("驗(yàn)證碼為:123456"))
        .unwrap();
    //  創(chuàng)建郵件發(fā)送者,第一個(gè)參數(shù)是郵件發(fā)送者賬號(hào),第二個(gè)參數(shù)是郵件發(fā)送者密碼,這里使用授權(quán)碼
    let creds = Credentials::new("xxxx@qq.com".to_owned(), "password".to_owned());

    // 使用ssl打開mail遠(yuǎn)程鏈接,填寫發(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ā)送,不會(huì)阻塞代碼 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)建郵件對(duì)象
    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("銹化動(dòng)力商城驗(yàn)證碼")
        // 設(shè)置郵件的內(nèi)容類型為純文本
        .header(ContentType::TEXT_PLAIN)
        // 設(shè)置郵件的正文內(nèi)容
        .body(String::from("驗(yàn)證碼為:123456"))
        .unwrap();
    //  創(chuàng)建郵件發(fā)送者,第一個(gè)參數(shù)是郵件發(fā)送者賬號(hào),第二個(gè)參數(shù)是郵件發(fā)送者密碼,這里使用授權(quán)碼
    let creds = Credentials::new("xxxxx@qq.com".to_owned(), "password".to_owned());

    // 使用ssl打開mail遠(yuǎn)程鏈接,填寫發(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:?}"),
    }
}

效果

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

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

相關(guān)文章

  • rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量

    rust標(biāo)準(zhǔn)庫std::env環(huán)境相關(guān)的常量

    在本章節(jié)中, 我們探討了Rust處理命令行參數(shù)的常見的兩種方式和處理環(huán)境變量的兩種常見方式, 拋開Rust的語法, 實(shí)際上在命令行參數(shù)的處理方式上, 與其它語言大同小異, 可能影響我們習(xí)慣的也就只剩下語法,本文介紹rust標(biāo)準(zhǔn)庫std::env的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-03-03
  • 解析rust中的struct

    解析rust中的struct

    自定義的數(shù)據(jù)類型,為相關(guān)聯(lián)的值命名,打包成有意義的組合,類似python的dict,但是賦值的時(shí)候可以不按順序,本文給大家介紹下rust中的struct知識(shí),感興趣的朋友一起看看吧
    2022-10-10
  • 如何使用VSCode配置Rust開發(fā)環(huán)境(Rust新手教程)

    如何使用VSCode配置Rust開發(fā)環(huán)境(Rust新手教程)

    這篇文章主要介紹了如何使用VSCode配置Rust開發(fā)環(huán)境(Rust新手教程),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • rust 一個(gè)日志緩存記錄的通用實(shí)現(xiàn)方法

    rust 一個(gè)日志緩存記錄的通用實(shí)現(xiàn)方法

    本文給出了一個(gè)通用的設(shè)計(jì)模式,通過建造者模式實(shí)例化記錄對(duì)象,可自定義格式化器將實(shí)例化后的記錄對(duì)象寫入到指定的緩存對(duì)象中,這篇文章主要介紹了rust 一個(gè)日志緩存記錄的通用實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-04-04
  • Rust字符串類型全解析(最新推薦)

    Rust字符串類型全解析(最新推薦)

    Rust語言中,字符串類型眾多,設(shè)計(jì)初衷是為了確保程序的安全、高效和靈活性,本文詳細(xì)解釋了Rust中不同的字符串類型,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 利用Rust編寫一個(gè)簡單的字符串時(shí)鐘

    利用Rust編寫一個(gè)簡單的字符串時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了一個(gè)用rust寫的一個(gè)簡單的練手的demo,一個(gè)字符串時(shí)鐘,在終端用字符串方式顯示當(dāng)前時(shí)間,感興趣的小伙伴可以了解一下
    2022-12-12
  • Rust中的不安全代碼詳解

    Rust中的不安全代碼詳解

    這篇文章主要為大家介紹了Rust中的不安全代碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Rust動(dòng)態(tài)數(shù)組Vec基本概念及用法

    Rust動(dòng)態(tài)數(shù)組Vec基本概念及用法

    Rust中的Vec是一種動(dòng)態(tài)數(shù)組,它可以在運(yùn)行時(shí)自動(dòng)調(diào)整大小,本文主要介紹了Rust動(dòng)態(tài)數(shù)組Vec基本概念及用法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 深入了解Rust中trait的使用

    深入了解Rust中trait的使用

    先前我們提到過?trait,那么Rust中的trait?是啥呢?本文將通過一些示例為大家詳細(xì)講講Rust中trait的使用,感興趣的小伙伴可以了解一下
    2022-11-11
  • Rust標(biāo)量類型的具體使用

    Rust標(biāo)量類型的具體使用

    本文主要介紹了Rust標(biāo)量類型的具體使用,其中包括整數(shù)類型、浮點(diǎn)類型、布爾類型以及字符類型,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論