一篇文章带你了解Java发送邮件:使用JavaMail API发送电子邮件的注意事项、发送附件等

news2024/12/26 11:45:35

Java发送邮件:使用JavaMail API发送电子邮件

作者:Stevedash

发表于:2023年8月13日 15点48分

来源:Java 发送邮件 | 菜鸟教程 (runoob.com)

电子邮件在现代通信中扮演着至关重要的角色,而在Java编程中,我们可以利用JavaMail API来方便地实现发送电子邮件的功能。本篇博客将向您介绍如何使用JavaMail API来发送电子邮件,以及一些关键概念和实用示例。


JavaMail API基本概念:

​ JavaMail API是Java平台上用于发送和接收电子邮件的强大库。它提供了一组类和方法,可以用于创建、发送和处理电子邮件。使用JavaMail API,您可以轻松地在Java应用程序中集成电子邮件功能,从而实现诸如发送提醒、通知和报告等任务。


Java 发送邮件

​ 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。

你也可以使用菜鸟教程提供的下载链接:

  • JavaMail mail.jar 1.4.5
  • JAF(版本 1.1.1) activation.jar

下载这俩个Jar文件。您需要把 mail.jaractivation.jar 文件添加到您的 项目中的lib中,然后添加进项目Project Structure➡Libraies➡“+”选择上面俩个架包

在这里插入图片描述

类型服务器名称服务器地址(163为例)SSL协议端口非SSL协议端口号TSL协议端口
收件服务器POPpop.163.com995110
收件服务器IMAPimap.163.com993143
发件服务器SMTPsmtp.163.com465/99425587

腾讯企业邮箱服务器地址:smtp.exmail.qq.com

腾讯邮箱服务器地址:smtp.qq.com

常见问题以及解决办法如下:

1、如果出现454 Command not permitted when TLS active 错误,请检查你的邮件端口配置的是不是25端口,如果是,请改成465端口,并且需要设置 mail.smtp.starttls.enable=false,即可解决问题。

2、部分邮件提供商smtp登录密码不是账号密码,而是授权码,务必注意。使用SSL、TLS这个一定要注意。

3、550 用户被锁定:普通 163 邮箱是无法通过 smtp.163.com 发送邮件的,只有 163 VIP 邮箱才行,然后设置 mail.smtp.host=smtp.vip.163.com

4、550 **Invalid User:**from 必须写成带 @ 的邮件格式,且 username 要用 @ 前面的

5、553 authentication is required:需要设置 mail.smtp.auth=true

步骤概述

以下是使用JavaMail API发送电子邮件的基本步骤:

  1. 设置邮件服务器属性:指定SMTP服务器的主机名、端口、身份验证等属性。
  2. 创建会话对象:使用邮件服务器属性创建一个会话对象,同时提供身份验证信息。
  3. 创建邮件消息:创建一个邮件消息对象,设置发件人、收件人、主题、内容等信息。
  4. 发送邮件:使用会话对象的Transport类发送邮件消息。

需要用户名密码验证邮件发送实例:

本实例以 QQ 邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:

img

QQ 邮箱通过生成授权码来设置密码:

img

示例代码

①下面是一个简单的Java程序,演示了如何使用JavaMail API发送一封电子邮件:
// 导入必要的类
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class EmailSender {

    public static void main(String[] args) {

        // 设置邮件服务器属性
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.qq.com"); // 设置邮件服务器主机名
        properties.put("mail.smtp.port", "587"); // 设置邮件服务器端口号
        properties.put("mail.smtp.auth", "true"); // 启用身份验证
        properties.put("mail.smtp.starttls.enable", "true"); // 启用 TLS
      //properties.put("mail.smtp.socketFactory.port", "465"); // 设置 SSL 端口
      //properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // 设置 SSL Socket Factory
      //properties.put("mail.smtp.socketFactory.fallback", "false"); // 禁用 SSL 回退

        // 创建会话对象
        Session session = Session.getInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your_email@example.com", "your_password");
                // 在这里填写发送邮件的邮箱地址和密码/授权码
            }
        });

        try {
            // 创建邮件消息
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("your_email@example.com")); // 设置发件人邮箱
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); // 设置收件人邮箱
            message.setSubject("JavaMail API测试"); // 设置邮件主题
            message.setText("这是一封来自JavaMail API的测试邮件。"); // 设置邮件内容

            // 发送邮件
            Transport.send(message);

            System.out.println("邮件发送成功!"); // 打印成功信息

        } catch (MessagingException e) {
            e.printStackTrace(); // 打印异常堆栈信息
        }
    }
}

下面是对于参数的描述:

  • type:要被设置为 TO, CC 或者 BCC,这里 CC 代表抄送、BCC 代表秘密抄送。举例:
  • addresses: 这是 email ID 的数组。在指定电子邮件 ID 时,你将需要使用 InternetAddress() 方法。

Message.RecipientType 枚举类型中,以下几个常量表示不同的收件人类型:

  • TO: 主要收件人,这些人将直接收到邮件的副本。
  • CC: 抄送(Carbon Copy),这些人将收到邮件的副本,但这并不是邮件的主要接收者。
  • BCC: 密送(Blind Carbon Copy),这些人也将收到邮件的副本,但其他收件人无法看到他们的地址。
②在使用 JavaMail API 创建邮件消息时,您可以通过指定这些收件人类型来将不同的收件人添加到邮件消息中。

例如,message.setRecipients(Message.RecipientType.TO, recipientAddresses) 将主要收件人添加到邮件消息中。同样,您可以使用相应的常量来添加抄送和密送收件人。

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class RecipientTypesExample {

    public static void main(String[] args) {

        // 设置邮件服务器属性
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.example.com");
        properties.put("mail.smtp.port", "465");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.socketFactory.port", "465");
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        properties.put("mail.smtp.socketFactory.fallback", "false");

        // 创建会话对象
        Session session = Session.getInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your_email@example.com", "your_password");
            }
        });

        try {
            // 创建邮件消息
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("your_email@example.com"));

            // 添加主要收件人(TO)
            Address[] toRecipients = {new InternetAddress("recipient1@example.com")};
            message.setRecipients(Message.RecipientType.TO, toRecipients);

            // 添加抄送(CC)
            Address[] ccRecipients = {new InternetAddress("cc_recipient@example.com")};
            message.setRecipients(Message.RecipientType.CC, ccRecipients);

            // 添加密送(BCC)
            Address[] bccRecipients = {new InternetAddress("bcc_recipient@example.com")};
            message.setRecipients(Message.RecipientType.BCC, bccRecipients);

            message.setSubject("测试邮件收件人类型");
            message.setText("这是一封测试邮件,演示不同的收件人类型。");

            // 发送邮件
            Transport.send(message);

            System.out.println("邮件发送成功!");

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

③发送一封emil给多个收件人,那么使用下面的方法来指定多个收件人ID:
void addRecipients(Message.RecipientType type,Address[] addresses) throws MessagingException

下面的是具体的代码:

import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;

public class SecureEmailSender {

    public static void main(String[] args) {

        // 设置邮件服务器属性
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.example.com"); // 设置邮件服务器主机名
        properties.put("mail.smtp.port", "465"); // 设置邮件服务器端口号
        properties.put("mail.smtp.auth", "true"); // 启用身份验证
        properties.put("mail.smtp.socketFactory.port", "465"); // 设置 SSL 端口
        properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // 设置 SSL Socket Factory
        properties.put("mail.smtp.socketFactory.fallback", "false"); // 禁用 SSL 回退

        // 创建会话对象
        Session session = Session.getInstance(properties, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your_email@example.com", "your_password");
                // 在这里填写发送邮件的邮箱地址和密码
            }
        });

        try {
            // 创建邮件消息
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("your_email@example.com")); // 设置发件人邮箱

            // 设置多个收件人邮箱
            String[] recipients = {"recipient1@example.com", "recipient2@example.com"};
            Address[] recipientAddresses = new Address[recipients.length];
            for (int i = 0; i < recipients.length; i++) {
                recipientAddresses[i] = new InternetAddress(recipients[i]);
            }
            message.setRecipients(Message.RecipientType.TO, recipientAddresses);

            message.setSubject("JavaMail API测试 - SSL加密"); // 设置邮件主题
            message.setText("这是一封经过SSL加密的测试邮件,发送给多个收件人。"); // 设置邮件内容

            // 发送邮件
            Transport.send(message);

            System.out.println("邮件发送成功!");

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

④发送一封HTML E-mail如下:
package main.mail邮件Api;

// 文件名 SendHTMLEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendHTMLEmail
{
    public static void main(String [] args)
    {

        // 收件人电子邮箱
        String to = "Stevedash@qq.com";

        // 发件人电子邮箱
        String from = "Stevedash@qq.com";

        // 指定发送邮件的主机为 localhost
        String host = "smtp.qq.com";

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);
        properties.put("mail.smtp.auth", "true");
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication("Stevedash@qq.com", "dsadasdasdasda"); //发件人邮件用户名、授权码
            }
        });



        try{
            // 创建默认的 MimeMessage 对象。
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: 头字段/标题头
            message.setSubject("This is the Subject Line!");

            // 发送 HTML 消息, 可以插入html标签,就是展示出来是页面中的同一个效果
            message.setContent("<h1>This is actual message</h1>",
                    "text/html" );

            // 发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....带网页标签效果的");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

如下图:

在这里插入图片描述

⑤发送带附件的邮件:
package main.mail邮件Api;

// 文件名 SendFileEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail
{
    public static void main(String [] args)
    {

        // 收件人电子邮箱
        String to = "1207036895@qq.com";

        // 发件人电子邮箱
        String from = "1207036895@qq.com";

        // 指定发送邮件的主机为 localhost
        String host = "smtp.qq.com";

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);
        properties.put("mail.smtp.auth", "true");
        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties,new Authenticator(){
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication("1207036895@qq.com", "zzzzzzzzzzzzzzzzzzz"); //发件人邮件用户名、授权码
            }
        });

        try{
            // 创建默认的 MimeMessage 对象。
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: 头字段
            message.setSubject("This is the Subject Line!");

            // 创建消息部分
            BodyPart messageBodyPart = new MimeBodyPart();

            // 消息
            messageBodyPart.setText("This is message body");

            // 创建多重消息
            Multipart multipart = new MimeMultipart();

            // 设置文本消息部分
            multipart.addBodyPart(messageBodyPart);

            // 附件部分
            messageBodyPart = new MimeBodyPart();
            String filename = "D:/桌面/新建文本文档.txt";
            DataSource source = new FileDataSource(filename);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(filename);
            multipart.addBodyPart(messageBodyPart);

            // 发送完整消息
            message.setContent(multipart );

            //   发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

可以发现有文件名出现乱码,

下面修改后的代码,解决了编码的问题

package main.mail邮件Api;

import java.io.UnsupportedEncodingException;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail1 {
    public static void main(String[] args) {
        String to = "1207036895@qq.com";
        String from = "1207036895@qq.com";
        String host = "smtp.qq.com";

        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);
        properties.put("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("1207036895@qq.com", "zzzzzzzzzzzzzzzzzzz");
            }
        });

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("这是邮件主题"); // 设置邮件主题,这里使用中文

            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setText("这是邮件正文内容"); // 设置邮件正文内容,这里使用中文

            MimeBodyPart attachmentPart = new MimeBodyPart();
            String filename = "D:/桌面/新建文本文档.txt";
            DataSource source = new FileDataSource(filename);
            attachmentPart.setDataHandler(new DataHandler(source));
            attachmentPart.setFileName(MimeUtility.encodeText(source.getName())); // 设置附件文件名,对文件名进行编码

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(attachmentPart);

            message.setContent(multipart);

            Transport.send(message);
            System.out.println("邮件发送成功!");
        } catch (MessagingException | UnsupportedEncodingException mex) {
            mex.printStackTrace();
        }
    }
}

输出结果如下:

在这里插入图片描述

注意事项和进阶功能

  • 要保护邮箱安全,建议将密码和敏感信息存储在安全的方式中,如配置文件或环境变量。
  • JavaMail API还支持更多高级功能,如附件、HTML内容、抄送、密送等。您可以根据需要进行扩展。
  • 为了避免被邮件服务器标记为垃圾邮件,确保邮件内容和行为遵循电子邮件的最佳实践。

总结

​ JavaMail API为Java程序员提供了发送电子邮件的便捷途径。通过设置邮件服务器属性、创建会话对象以及构建邮件消息,我们可以轻松地在Java应用程序中实现电子邮件发送功能。在实际项目中您可以根据不同场景的不同需求,采用如附件、HTML内容和抄送等应对。

作者:Stevedash

发表于:2023年8月13日 15点48分

来源:Java 发送邮件 | 菜鸟教程 (runoob.com)

注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/871702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jps -lvm查看Java虚拟机上正在运行的进程

jps命令是用于查看Java虚拟机上正在运行的进程的命令。 使用jps命令时&#xff0c;可以带上-l参数&#xff0c;以显示完整的包括主类名和Java虚拟机参数的进程名。 如果带上-m参数&#xff0c;则可以显示出当前进程的主类的完整包名和传递给main()方法的参数。 如果带上-v参…

HotSpot虚拟机之类加载过程及类加载器

目录 一、类加载过程 1. 加载&#xff08;Loading&#xff09; 2. 验证&#xff08;Verification&#xff09; 3. 准备&#xff08;Preparation&#xff09; 4. 解析&#xff08;Resolution&#xff09; 5. 初始化&#xff08;Initialization&#xff09; 二、类加载时…

实践教程|基于 pytorch 实现模型剪枝

PyTorch剪枝方法详解&#xff0c;附详细代码。 一&#xff0c;剪枝分类 1.1&#xff0c;非结构化剪枝 1.2&#xff0c;结构化剪枝 1.3&#xff0c;本地与全局修剪 二&#xff0c;PyTorch 的剪枝 2.1&#xff0c;pytorch 剪枝工作原理 2.2&#xff0c;局部剪枝 2.3&#…

MySQL学习笔记之MySQL5.7用户管理

文章目录 用户创建用户修改修改用户名修改密码修改自己的密码修改其他用户的密码 删除用户权限管理查看所有权限授予权限回收权限权限表columns_privprocs_privtables_priv 用户创建 基本格式&#xff1a;create user 用户名 identified by 密码; mysql> create user szc …

[静态时序分析简明教程(十)]组合电路路径set_max/min_delay

静态时序分析简明教程-组合电路路径 一、写在前面1.1 快速导航链接 二、组合电路路径2.1 SDC约束2.2 举例 三、总结 一、写在前面 一个数字芯片工程师的核心竞争力是什么&#xff1f;不同的工程师可能给出不同的答复&#xff0c;有些人可能提到硬件描述语言&#xff0c;有些人…

无涯教程-Perl - recv函数

描述 This function receives a message on SOCKET attempting to read LENGTH bytes, placing the data read into variable SCALAR.The FLAGS argument takes the same values as the recvfrom( ) system function, on which the function is based. When communicating wit…

【c语言】字符函数与字符串函数(上)

大家好呀&#xff0c;今天给大家分享一下字符函数和字符串函数&#xff0c;说起字符函数和字符串函数大家会想到哪些呢&#xff1f;&#xff1f;我想到的只有求字符串长度的strlen,拷贝字符串的strcpy,字符串比较相同的strcmp,今天&#xff0c;我要分享给大家的是我们一些其他的…

② vue模板语法

文本绑定 普通文本渲染{{ }} 静态的文本绑定 v-html 动态的文本绑定 b-bind&#xff08;:&#xff09; 动态的属性绑定&#xff0c;可简写&#xff08;比如&#xff1a;v-bind:id :id&#xff09; 列表渲染 v-for 要有一个唯一id :key"item.id"(没有id就…

for macOS-21.1.0.3267中文直装版功能介绍及系统配置要求

FL Studio 21简称FL水果软件,全称是&#xff1a;Fruity Loops Studio编曲&#xff0c;由于其Logo长的比较像一款水果因此&#xff0c;在大家更多的是喜欢称他为水果萝卜&#xff0c;FL studio21是目前最新的版本&#xff0c;这是一款可以让你的计算机就像是一个全功能的录音室&…

GPT-NER:使用大型语言模型进行命名实体识别

讲在前面&#xff0c;chatgpt出来的时候就想过将其利用在信息抽取方面&#xff0c;后续也发现了不少基于这种大语言模型的信息抽取的论文&#xff0c;比如之前收集过的&#xff1a; https://github.com/cocacola-lab/GPT4IE https://github.com/RidongHan/Evaluation-of-ChatG…

p5.js 渐变填充的实现方式

theme: smartblue 本文简介 p5.js 作为一款艺术类的 canvas 库&#xff0c;对颜色方面的支持是挺下功夫的&#xff0c;比如本文要介绍的渐变方法。 lerpColor() 要实现渐变效果&#xff0c;可以使用 lerpColor() 方法。 lerpColor 的作用是混合两个颜色以找到一个介于它们之间的…

QGraphicsView实现简易地图5『经纬网格』

前文链接&#xff1a;QGraphicsView实现简易地图4『局部加载-地图漫游』 由于GCJ02 Web 墨卡托投影 纬度并不随像素等分&#xff0c;且两极跨度较大&#xff0c;因此本次演示采用的经纬网等分逻辑为等分像素。同等像素跨度之间&#xff0c;两级纬度变化较小&#xff0c;越靠近赤…

项目介绍:《WeTalk》网页聊天室 — Spring Boot、MyBatis、MySQL和WebSocket的奇妙融合

目录 引言&#xff1a; 前言&#xff1a; 技术栈&#xff1a; 主要功能&#xff1a; 功能详解&#xff1a; 1. 用户注册与登录&#xff1a; 2. 添加好友 3. 实时聊天 4. 消息未读 5. 删除聊天记录 6. 删除好友 未来展望&#xff1a; 项目地址&#xff1a; 结语&am…

IDEA关闭项目,但是后台程序没有关闭进程(解决方案)

最近遇到一个很奇怪的问题&#xff0c;idea关闭项目后&#xff0c;系统进程没有杀死进程&#xff0c;再次执行的时候会提示端口占用&#xff0c;并提示Process exited with an error: 1 (Exit value: 1) 错误原因&#xff1a;应用程序关闭后&#xff0c;进程不能同步关闭 解决方…

Python 使用Hadoop 3 之HDFS 总结

Hadoop 概述 Hadoop 是一个由Apache 软件基金会开发的分布式基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序&#xff0c;充分利用集群的威力进行高速运算和存储。 Hadoop 实现一个分布式文件系统&#xff08;Hadoop Distributed File Sy…

短肥网络的 RTT 敏感性

周二下班路上发了一则朋友圈&#xff1a; 长肥管道的特征和问题谈得够多了&#xff0c;但这里谈的是短肥管道&#xff0c;因为下面趋势&#xff0c;短肥管道才是未来大势&#xff1a; 云计算致使数据中心网络快速发展&#xff0c;而数据中心网络时延短&#xff0c;带宽大。CD…

尼科彻斯定理-C语言/Java

描述 验证尼科彻斯定理&#xff0c;即&#xff1a;任何一个整数m的立方都可以写成m个连续奇数之和。 例如&#xff1a; 1^31 2^335 3^37911 4^313151719 输入一个正整数m&#xff08;m≤100&#xff09;&#xff0c;将m的立方写成m个连续奇数之和的形式输出。&…

代码详解——Transformer

文章目录 整体架构Modules.pyScaledDotProductAttention SubLayers.pyMultiHeadAttentionPositionwiseFeedForward Layers.pyEncoderLayerDecoderLayer Models.pyget_pad_maskget_subsequent_maskPositionalEncodingEncoderDecoderTransformer 整体架构 源码地址&#xff08;py…

传输控制协议TCP

目录 TCP报文格式 TCP的特点 TCP原理: 1.确认应答机制 2.超时重传机制 3.连接管理机制 建立连接 ​编辑关闭连接 4.滑动窗口机制 ​5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答 TCP报文格式 1.源端口号:发送端的哪一个端口发出的 2.目的端口号:接收端的哪一个端…

【深度学习】遗传算法[选择、交叉、变异、初始化种群、迭代优化、几何规划排序选择、线性交叉、非均匀变异]

目录 一、遗传算法二、遗传算法概述2.1 选择2.2 交叉2.3 变异 三、遗传算法的基本步骤3.1 编码3.2 初始群体的生成3.3 适应度评估3.4 选择3.5 交叉3.6 变异3.7 总结 四、遗传算法工具箱4.1 initializega4.2 ga4.3 normGeomSelect4.4 arithXover4.5 nonUnifMutation 五、遗传算法…