新增无人收件和支持一些字符邮箱

This commit is contained in:
eoao
2025-06-25 10:39:21 +08:00
parent 46a6f29c01
commit dcae28d368
12 changed files with 47 additions and 41 deletions
@@ -91,6 +91,14 @@
height="20"/>
</el-tooltip>
<el-tooltip v-if="item.status === 7"
effect="dark"
content="无人收件"
>
<Icon icon="ic:round-mark-email-read" style="color:#FBBD08" width="20"
height="20"/>
</el-tooltip>
</div>
<div v-else></div>
<span class="name">
@@ -76,9 +76,6 @@ function updateContent() {
-webkit-tap-highlight-color: transparent;
}
a {
color: #409EFF !important;
}
</style>
<div class="shadow-content">
${cleanedHtml}
+1 -1
View File
@@ -1,4 +1,4 @@
export function isEmail(email) {
const reg = /^[a-zA-Z0-9]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]+$/;
const reg = /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/;
return reg.test(email);
}
+7 -6
View File
@@ -27,10 +27,10 @@
placeholder="请选择"
class="select"
>
<el-option key="1" label="用户" :value="'user'"/>
<el-option key="2" label="邮箱" :value="'account'"/>
<el-option key="3" label="发件人" :value="'name'"/>
<el-option key="4" label="主题" :value="'subject'"/>
<el-option key="1" label="用户" :value="'user'"/>
<el-option key="2" label="邮箱" :value="'account'"/>
</el-select>
<div style="color: #333;display: flex;">
<span>{{ selectTitle }}</span>
@@ -41,9 +41,10 @@
</el-input>
<el-select v-model="params.type" placeholder="Select" class="status-select">
<el-option key="1" label="全部" value="all"/>
<el-option key="2" label="发件" value="send"/>
<el-option key="3" label="收件" value="receive"/>
<el-option key="4" label="删除" value="delete"/>
<el-option key="3" label="已接收" value="receive"/>
<el-option key="2" label="已发送" value="send"/>
<el-option key="4" label="删除" value="delete"/>
<el-option key="4" label="无人收件" value="noone"/>
</el-select>
<Icon class="icon" icon="iconoir:search" @click="search" width="20" height="20"/>
<Icon class="icon" @click="changeTimeSort" icon="material-symbols-light:timer-arrow-down-outline"
@@ -191,7 +192,7 @@ function getEmailList(emailId, size) {
.status-select {
margin-bottom: 2px;
width: 80px;
width: 100px;
:deep(.el-select__wrapper) {
min-height: 28px;
}
+1 -1
View File
@@ -213,7 +213,7 @@
<div class="card-content">
<div class="concerning-item">
<span>版本:</span>
<span>v1.2.0</span>
<span>v1.2.1</span>
</div>
<div class="concerning-item">
<span>交流:</span>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -6,8 +6,8 @@
<title></title>
<link rel="icon" href="/assets/favicon-C5dAZutX.svg" type="image/svg+xml">
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<script type="module" crossorigin src="/assets/index-DrpZkhSk.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-C0H8Chfa.css">
<script type="module" crossorigin src="/assets/index-BgK8IB2e.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BJW3-Q2l.css">
</head>
<body>
<div id="loading-first">
+3 -2
View File
@@ -25,7 +25,7 @@ export const permConst = {
export const emailConst = {
type: {
SEND: 1,
RECEIVE: 0,
RECEIVE: 0
},
status: {
RECEIVE: 0,
@@ -34,7 +34,8 @@ export const emailConst = {
BOUNCED: 3,
COMPLAINED: 4,
DELAYED: 5,
SAVING: 6
SAVING: 6,
NOONE: 7
}
}
+3 -5
View File
@@ -28,8 +28,6 @@ export async function email(message, env, ctx) {
const email = await PostalMime.parse(content);
console.warn(email)
const params = {
sendEmail: email.from.address,
name: email.from.name,
@@ -42,8 +40,8 @@ export async function email(message, env, ctx) {
inReplyTo: email.inReplyTo,
relation: email.references,
messageId: email.messageId,
userId: account.userId,
accountId: account.accountId,
userId: account ? account.userId : 0,
accountId: account ? account.accountId : 0,
isDel: isDel.DELETE,
status: emailConst.status.SAVING
};
@@ -74,7 +72,7 @@ export async function email(message, env, ctx) {
await attService.addAtt({ env }, attachments);
}
await emailService.completeReceive({ env }, emailRow.emailId);
await emailService.completeReceive({ env },account ? emailConst.status.RECEIVE : emailConst.status.NOONE, emailRow.emailId);
} catch (e) {
console.error('邮件接收异常: ', e);
+6 -2
View File
@@ -505,6 +505,10 @@ const emailService = {
conditions.push(eq(email.isDel, isDel.DELETE));
}
if (type === 'noone') {
conditions.push(eq(email.status, emailConst.status.NOONE));
}
if (userEmail) {
conditions.push(like(user.email, `${userEmail}%`));
}
@@ -569,10 +573,10 @@ const emailService = {
await orm(c).update(email).set({ isDel: isDel.NORMAL }).where(eq(email.userId, userId)).run();
},
async completeReceive(c, emailId) {
async completeReceive(c, status, emailId) {
await orm(c).update(email).set({
isDel: isDel.NORMAL,
status: emailConst.status.RECEIVE
status: status
}).where(eq(email.emailId, emailId)).run();
}
};
+1 -1
View File
@@ -1,6 +1,6 @@
const verifyUtils = {
isEmail(str) {
return /^[a-zA-Z0-9]+@([a-zA-Z0-9-]+\.)+[a-zA-Z0-9-]+$/.test(str);
return /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/.test(str);
}
}