thoka
(Thomas Kalka)
2월 6, 2021, 6:18오후
1
IMAP 동기화를 테스트하는 동안 IMAP 계정에서 가져오는 과정에서 Group.email_username을 위한 단계적(staged) 사용자가 생성되었습니다.
무슨 일이 일어났는지 이해하려고 노력하던 중, Group.find_by_email이 Group.email_username을 고려하지 않는다는 사실을 알게 되었습니다. 따라서 이 값을 포함하려면 Group.incoming_email에 해당 값을 설정해야 합니다.
재현 단계:
IMAP 동기화 활성화
그룹의 이메일 동기화 옵션을 구성하되 Group.incoming_email은 설정하지 않음
Group.email_username으로 이메일 전송
1개의 좋아요
IMAP은 아직 조금 더 개발이 필요한 상태인 것 같습니다, @sam ?
sam
(Sam Saffron)
2월 8, 2021, 1:00오전
3
이것이 합리적으로 지원되어야 합니다. 메타에서 프로덕션 환경으로 사용하고 있기 때문입니다.
@martin 이 보고서를 한번 빠르게 확인해 주시겠습니까?
martin
(Martin Brennan)
2월 8, 2021, 3:44오전
5
@thoka 님, 감사합니다. 이 문제를 확인해 보았습니다. Group.find_by_email에 email_username을 추가해야 한다는 점에서는 동의합니다. 하지만 이번 사례에서 그룹 이메일 사용자가 스테이지된(staged) 상태가 된 직접적인 원인은 아닙니다. 실제로 이 문제는 수신기(receiver)에서 새로 생성된 토픽에 다른 주소를 추가하는 단계에서 발생합니다. 여기서 핵심은 should_invite?입니다.
def add_other_addresses(post, sender)
%i(to cc bcc).each do |d|
if @mail[d] && @mail[d].address_list && @mail[d].address_list.addresses
@mail[d].address_list.addresses.each do |address_field|
begin
address_field.decoded
email = address_field.address.downcase
display_name = address_field.display_name.try(:to_s)
next unless email["@"]
if should_invite?(email)
user = find_or_create_user(email, display_name)
if user && can_invite?(post.topic, user)
post.topic.topic_allowed_users.create!(user_id: user.id)
TopicUser.auto_notification_for_staging(user.id, post.topic_id, TopicUser.notification_reasons[:auto_watch])
post.topic.add_small_action(sender, "invited_user", user.username, import_mode: @opts[:import_mode])
end
# cap number of staged users created per email
if @staged_users.count > SiteSetting.maximum_staged_users_per_email
post.topic.add_moderator_post(sender, I18n.t("emails.incoming.maximum_staged_user_per_email_reached"), import_mode: @opts[:import_mode])
return
This file has been truncated. show original
이 함수는 결국 이메일을 group_incoming_emails_regex와 비교합니다:
이 정규식(또는 다른 정규식)에서 email_username과도 비교하도록 수정해야 할 것 같습니다. 지금까지 그룹의 스테이지된 사용자가 생성되는 것이 문제라고 생각하지는 않았지만, 조금 지저분하고 불필요해 보이는 것은 이해할 수 있습니다. 이 부분을 수정할 때, 현재 제가 알지 못하는 중요한 이유(예: 의도된 동작)로 인해 그룹의 스테이지된 사용자가 생성되지 않도록 하는지 확인하기 위해 테스트를 수행해야 합니다.
5개의 좋아요
martin
(Martin Brennan)
6월 11, 2021, 1:30오전
6
3개의 좋아요