diff --git a/backend/controllers/email/reply.go b/backend/controllers/email/reply.go
index c22c262e..77b05b69 100644
--- a/backend/controllers/email/reply.go
+++ b/backend/controllers/email/reply.go
@@ -18,7 +18,7 @@ func applyReplyThread(ctx *context.Context, input sendRequest, message *parsemai
if id == 0 {
return nil
}
- if id < 0 || ctx == nil || ctx.UserID <= 0 || db.Instance == nil || message == nil {
+ if id < 0 || ctx == nil || ctx.UserID <= 0 || db.Instance == nil {
return validation.ErrInvalidEmail
}
if input.DraftID > 0 {
@@ -37,6 +37,7 @@ func applyReplyThread(ctx *context.Context, input sendRequest, message *parsemai
var original models.Email
found, err := db.Instance.ID(id).
Where("status <> ?", consts.EmailStatusDrafts).
+ And("type = ?", consts.EmailTypeReceive).
And("EXISTS (SELECT 1 FROM user_email WHERE email_id = ? AND user_id = ? AND is_deleted = 0)", id, ctx.UserID).
Get(&original)
if err != nil {
diff --git a/backend/listen/imap_server/session_fetch.go b/backend/listen/imap_server/session_fetch.go
index 1d1befc9..c6e878d4 100644
--- a/backend/listen/imap_server/session_fetch.go
+++ b/backend/listen/imap_server/session_fetch.go
@@ -103,7 +103,6 @@ func buildEnvelope(email *response.EmailResponseData, traEmail *parsemail.Email)
Bcc: usersToAddresses(traEmail.Bcc),
MessageID: messageID,
InReplyTo: parsemail.ThreadMessageIDs(email.InReplyTo),
- // InReplyTo 和 References 暂不支持
}
}
diff --git a/frontend/src/i18n/i18n.js b/frontend/src/i18n/i18n.js
index 1ee814e6..711998cf 100644
--- a/frontend/src/i18n/i18n.js
+++ b/frontend/src/i18n/i18n.js
@@ -1,5 +1,6 @@
// 管理后台统一使用中文。
const lang = {
+ "mail_reply": "回复",
"mail_no_subject": "(无主题)",
"draft_save": "保存草稿",
"draft_saved": "草稿已保存",
diff --git a/frontend/src/views/Editer/Reply.js b/frontend/src/views/Editer/Reply.js
index 6bc963ac..4618fc9c 100644
--- a/frontend/src/views/Editer/Reply.js
+++ b/frontend/src/views/Editer/Reply.js
@@ -23,6 +23,7 @@ const plainBody = message => {
}
export function prepareReply(message, identity) {
+ if (message.type !== 0) throw new Error(lang.fail)
const replyTo = readAddresses(message.reply_to)
const recipients = replyTo.length ? replyTo : [{EmailAddress: message.from_address, Name: message.from_name}]
if (!recipients.length || recipients.some(item => !item.EmailAddress || /[\r\n]/.test(item.EmailAddress))) {
diff --git a/frontend/src/views/EmailDetail/EmailDetail.js b/frontend/src/views/EmailDetail/EmailDetail.js
index 29794f86..d4c066ad 100644
--- a/frontend/src/views/EmailDetail/EmailDetail.js
+++ b/frontend/src/views/EmailDetail/EmailDetail.js
@@ -93,7 +93,7 @@ export function usePage() {
const backToList = () => router.push({name: 'list'})
const handleReply = () => {
const id = Number(detailData.value.id)
- if (loading.value || loadError.value || !Number.isSafeInteger(id) || id <= 0) return
+ if (loading.value || loadError.value || detailData.value.type !== 0 || !Number.isSafeInteger(id) || id <= 0) return
return router.push({name: 'editer', query: {reply: String(id)}})
}
diff --git a/frontend/src/views/EmailDetail/EmailDetail.vue b/frontend/src/views/EmailDetail/EmailDetail.vue
index b0bdd1e4..72bb8b79 100644
--- a/frontend/src/views/EmailDetail/EmailDetail.vue
+++ b/frontend/src/views/EmailDetail/EmailDetail.vue
@@ -5,6 +5,13 @@