function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Dev 長尾拓磨Dev 長尾拓磨 

サプライヤゲストユーザーがメールを送ると、差し込み項目にゲストユーザーのデータが入る

サプライヤゲストユーザーがメールテンプレートを使用して、
特定のユーザー宛てにメールを送った時、
差し込み項目には対象ユーザーの項目を差し込む予定なのですが、
サイトゲストユーザーのデータが差し込まれてしまいます。
例えば、メールテンプレートに{!User.Name}と書いておくと、ここには「サイトゲストユーザー」が入ってきてしまいます。

具体的な状況を書きます。
コミュニティのセルフ登録画面にて、Emailを入力させ登録します。
<apex:inputField value="{!registUser.Email}"  />

Apex側で
List<User> userQuery = [select Id from User where Email = :registUser.Email LIMIT 1];
if(userQuery != null && userQuery .size() >0){
          //メール送信
          sendMail(userQuery [0].Id);
}else{
          //登録処理
}


/***メール送信処理***/
public void sendMail(Id userId){
        
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        
        mail.setTargetObjectId(userId);
        mail.setSenderDisplayName('Sender');
        mail.setUseSignature(false);
        mail.saveAsActivity = false;

        EmailTemplate template = [select Id from EmailTemplate where DeveloperName = 'Mail_SupplierUserRegist' LIMIT 1];
        mail.setTemplateID(template.Id);
        
        // ここで送る
        Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
          
}

大雑把ですが、このような処理です。
テンプレートの本文に{! User.Name }を入れて、送信先ユーザーの名前を埋め込みたいと思っています。
しかし、ここにサイトゲストユーザーという名前が入ってしまうという事象です。


そこで、この原因が判別できないのですが、知っている方がいましたらご教授いただきたいと思います。
よろしくお願いします。

 
Best Answer chosen by Dev 長尾拓磨
Taiki YoshikawaTaiki Yoshikawa
メールテンプレートの{!User.Name}の差し込みはログインユーザの情報がセットされます。
今回の場合は事前にログインしないで処理を実行しているためサイトゲストユーザの情報がセットされていると思います。

All Answers

Taiki YoshikawaTaiki Yoshikawa
Force.comサイトで公開したセールスフォースにログインせずに利用できるページの場合は、
サイトゲストユーザというユーザとして処理が実行されます。

コミュニティユーザとしてセールスフォースにログインした後でしたら、
{!User.Name}で対象ユーザの名前がセットされると思います。

サイトゲストユーザは設定のユーザ一覧には表示されませんが、
ユーザIDをURLに直接入力すると詳細ページを表示することができます。
Taiki YoshikawaTaiki Yoshikawa
メールテンプレートの{!User.Name}の差し込みはログインユーザの情報がセットされます。
今回の場合は事前にログインしないで処理を実行しているためサイトゲストユーザの情報がセットされていると思います。
This was selected as the best answer
Dev 長尾拓磨Dev 長尾拓磨
返答ありがとうございます。
そもそもが勘違いだったのですね。{!User.Name}には受信者のレコードが差し込まれると勘違いしていました。

それでは、受信者のレコードを差し込む方法はないのでしょうか・・・?
少し調べてみたいと思います。
Dev 長尾拓磨Dev 長尾拓磨
解決しました。
{!Receiving_User.fieldname}という記述をリファレンスで見つけました。
https://help.salesforce.com/articleView?id=merge_fields_email_templates.htm&language=ja&type=0

きっとUserを指定すると、Sending_Userという扱いになるのでしょうか。そこまで深く調べていませんが。
本来Userを差し込みに使うときは、Receiving か Sending をつけて明示的にすべきなのですね。
ありがとうございました。